用 symfony/console 组件写命令行脚本
2

前言

php artisan model:create User 这条命令你一定很熟悉。
下面我们就来实现类似的命令。

symfony/console 是什么

首先要明白 symfony/console 是什么?
它是 symfony 里面的一个控制台命令组件,更优秀的事 symfony 的组件各自都保持独立,不需要其他依赖。这就意味着我们可以在任意我们想要的地方去使用。

如何编写 console 脚本

  1. composer 安装 symfony/console 组件。
  2. 按照规范编写 console 应用程序(等于 artisan )。
  3. 按照规范编写 commands (命令)。
  4. 大功告成。

安装

composer require symfony/console

编写 console 程序

console_command文件

#!/usr/bin/env php
<?php

require __DIR__.'/vendor/autoload.php';

use Symfony\Component\Console\Application;
use Cmd\ModelCommand;

$application = new Application();

// 注册我们编写的命令 (commands)
$application->add(new ModelCommand());

$application->run();

编写 command 程序

这里需要注意自动加载问题!

 "autoload": {
       "psr-4":{
           "Cmd\\": "Cmd"
       }

上面一段加入到 composer.json 中。下面是我的最终文件内容

{
    "require": {
        "symfony/console": "^4.2"
    },
    "autoload": {
       "psr-4":{
           "Cmd\\": "Cmd"
       }
   }
}

ModelCommand.php

<?php
namespace Cmd;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;

class ModelCommand extends Command
{
    protected function configure()
    {
        $this
            // 命令的名称 ("php console_command" 后面的部分)
            ->setName('model:create')
            // 运行 "php console_command list" 时的简短描述
            ->setDescription('Create new model')
            // 运行命令时使用 "--help" 选项时的完整命令描述
            ->setHelp('This command allow you to create models...')
            // 配置一个参数
            ->addArgument('name', InputArgument::REQUIRED, 'what\'s model you want to create ?')
            // 配置一个可选参数
            ->addArgument('optional_argument', InputArgument::OPTIONAL, 'this is a optional argument');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // 你想要做的任何操作
        $optional_argument = $input->getArgument('optional_argument');

        $output->writeln('creating...');
        $output->writeln('created ' . $input->getArgument('name') . ' model success !');

        if ($optional_argument)
            $output->writeln('optional argument is ' . $optional_argument);

        $output->writeln('the end.');
    }
}

大功告成

file

高度自律,深度思考,勤奋

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!