加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_镇江站长网 (https://www.0511zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

从零开始构建 PHP 命令行微框架四:minicli 功能详解

发布时间:2022-09-24 12:55:34 所属栏目:PHP教程 来源:
导读:  在之前构建 Minicli 的章节中,我们演示了使用 PHP 为 只有 CLI 的应用程序引导无依赖项微框架的步骤。

  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等多个知识点高级进阶干货欢迎加入我的官方群啊点击此处
 

(编辑:应用网_镇江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!