自定义命令

命令行依赖于 symfony/console 具体操作可以查看 console

版本: ^3.2

所有命令行文件存放在 src/Console 目录中,命令行对象需要继承 Symfony\Component\Console\Command\Command, 在启动 Console 控制台对象的时候,程序会自动扫描目录下所有命令行文件,并且进行处理。

  1. <?php
  2. namespace Console;
  3. use Symfony\Component\Console\Command\Command;
  4. use Symfony\Component\Console\Input\InputInterface;
  5. use Symfony\Component\Console\Output\OutputInterface;
  6. class Demo extends Command
  7. {
  8. public function configure()
  9. {
  10. $this->setName('demo');
  11. }
  12. public function execute(InputInterface $input, OutputInterface $output)
  13. {
  14. $output->writeln('hello world');
  15. }
  16. }

更多请查看: console

注册命令行

在默认情况下,命令行一般会存储在 src/Console 目录中,对于一些特殊情况,例如我需要在扩展包中注册命令行,就需要手动注册命令行了。

框架本身提供两种注册方式,一种是配置文件注册,另外一种是通过在服务提供者 register 方法中手动注册。

  1. class FooServiceProvider implements ServiceProviderInterface
  2. {
  3. public function register(Container $container)
  4. {
  5. $container->add('foo', new Foo());
  6. config()->merge([
  7. 'consoles' => [
  8. DemoConsole::class
  9. ]
  10. ]);
  11. }
  12. }

代码解析:

在系统中,命令行 application 会执行如下代码,用于注册用户自定义命令,而命令来至于配置,那么只需要我们将命令行对象添加到配置中,即可达成注册的效果.

  1. foreach (config()->get('consoles', []) as $console) {
  2. $this->add(new $console());
  3. }

下一节: 单元测试