从零开始构建 PHP 命令行微框架四:minicli 功能详解
发布时间:2022-09-24 12:55:34 所属栏目:PHP教程 来源:
导读: 在之前构建 Minicli 的章节中,我们演示了使用 PHP 为 只有 CLI 的应用程序引导无依赖项微框架的步骤。
Minicli 是作为一个教育实验创建的,也是一个轻量级的基础,让我可以在我的个人项目中重复使用。我
Minicli 是作为一个教育实验创建的,也是一个轻量级的基础,让我可以在我的个人项目中重复使用。我
在之前构建 Minicli 的章节中,我们演示了使用 PHP 为 只有 CLI 的应用程序引导无依赖项微框架的步骤。 Minicli 是作为一个教育实验创建的,也是一个轻量级的基础,让我可以在我的个人项目中重复使用。我喜欢把它看作我能组装起来的最基本的单元,在它的基础上我可以建造我的玩具。 自从我分享我关于这个系列的最新帖子以来,已经有几个月了,我不愿分享我一直在做的工作,因为它总是感觉像是一件不完整的工作。但是它会不会是完整的 (或者感觉是这样的) 呢? 大概不会吧。Minicli 从一开始就是开源的,虽然我从来没有打算把它变成一个主流项目,但我也认为它可以帮助那些对在命令行中构建简单事物感兴趣的人,而不会被几十个外部要求所阻碍。 因此,我想正式向你介绍Minicli,这是一个高度实验性的、无依赖关系的、以 cli 为中心的 PHP 应用程序微框架。 虽然我不主张重新发明应用程序中的所有轮子f3-fatfree小型php框架教程,但我认为应该有一个起点,不需要 10 多个不同的库来进行基本的命令解析和路由。从那里开始,就外部库而言,你应该能够有意识地选择你将依赖什么。 Minicli 是我为了解决这种情况而想出来的。 到目前为止,我和 Minicli 一起构建的东西: Dolphin,用于从命令行管理 DigitalOcean droplets 的命令行工具。 我的网站,一种静态内容 CMS,摘自我的 DEV 帖子。我将这作为一个单独的项目开源,名为 Librarian (Wip)。 php yii框架视频教程_f3-fatfree小型php框架教程_php框架教程 在这篇文章中,你将学习如何使用 Minicli 在 PHP 中创建一个简单的 CLI 应用程序。 创建项目 你需要 php-cli 命令和 Composer 才能开始。 使用以下命令创建新项目: composer create-project --prefer-dist minicli/application myapp 安装完成后,你可以使用以下命令运行minicli命令: cd myapp ./minicli 这将向你显示默认的应用程序签名。 Minicli 附带的 help 命令在 app/Command/help/DefaultController.php 中定义,可自动生成可用命令树: ./minicli help Available Commands help └──test 定义在app/Command/Help/TestController.php中的help test命令显示了参数的输出测试: ./minicli help test user=erika name=value Hello, erika! Array ( [user] => erika [name] => value ) 创建你的第一个命令 创建命令最简单的方式是编辑 minicli 命令脚本,通过 registerCommand 在应用程序内定义一个新命令为匿名函数: #!/usr/bin/php setSignature('./minicli mycommand'); $app->registerCommand('mycommand', function(CommandCall $input) { echo "My Command!"; var_dump($input); }); $app->runCommand($argv); 然后,你可以使用以下命令执行新命令: ./minicli mycommand 使用命令控制器 要将命令组织到控制器中,你需要使用 命令命名空间. 假设你想创建一个名为 hello 的命令。你应该先在 app/Commands 目录下新建一个目录: mkdir app/Commands/Hello 现在,Hello是你的命令命名空间。在该目录中,你需要至少创建一个命令控制器。可以从DefaultController开始,当不提供子命令时,默认调用该DefaultController。 这个名为DefaultController的类可能是这样的: getPrinter()->display("Hello World!"); } } 此命令可通过以下方式使用: ./minicli hello 由于没有提供子命令,因此推断你要执行DEFAULT命令。 也可以通过以下方式调用此命令: ./minicli hello default 放置在Hello命名空间中的任何其他命令控制器都将以类似的方式使用。例如,假设你想要创建一个新的子命令,如hello capps。 然后,你创建一个名为CapsController的新命令控制器: getPrinter()->display("HELLO WORLD!"); } } 此新命令将以以下方式提供: ./minicli hello caps 使用参数 Minicli 对命令调用参数使用了一些约定: 父类CommandController提供了几个使用命令调用参数的方便方法。 例如,假设你想要更新前面的hello命令,以使用一个可选参数告诉将要问候的人的姓名。 hasParam('user') ? $this->getParam('user') : 'World'; $this->getPrinter()->display(sprintf("Hello, %s!", $name)); } } 现在,要使用该命令的自定义版本,你需要运行: ./minicli hello user=erika 你将获得以下输出: Hello, erika! CommandCall 类方法打印输出 CliPrinter 类提供了打印各种颜色和样式的消息的快捷方法。 它附带两个捆绑的主题:regular 和 unicorn。这是在应用引导配置数组中设置的,默认设置为使用regular主题。 public function handle() { $this->getPrinter()->info("Starting Minicli..."); if (!$this->hasParam('message')) { $this->getPrinter()->error("Error: you must provide a message."); exit; } $this->getPrinter()->success($this->getParam('message')); } CliPrinter 类方法结束 Minicli 是一项正在进行中的工作,但你已经可以将其用作极简主义基础,在此基础上你可以构建有趣的玩具项目或有用的 命令行工具,如 Dolphin。 以下是我想用 Minicli 构建的一些想法,但到目前为止还没有时间 (如果有人构建这些想法,我绝对不会介意): 如果你想尝试一下 Minicli,请查看documentation网站了解更多详细信息,如果你有任何问题,请不要犹豫留下评论:) *CliPrinter 类提供了打印各种颜色和样式的消息的快捷方法。 很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了迷茫没方向,不知道该从哪儿入手去提升自己。→→管理整理了一些资料,有 腾讯 等一线大厂进阶知识体系 可供参考(相关学习资料以及笔面试题) 覆盖各个技术栈:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2f3-fatfree小型php框架教程,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货欢迎加入我的官方群啊点击此处 (编辑:应用网_镇江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐