php artisan model:create User
這條命令你一定很熟悉。
下面我們就來實現類似的命令。
首先要明白 symfony/console
是什麼?
它是 symfony 裡面的一個控制檯命令元件,更優秀的事 symfony 的元件各自都保持獨立,不需要其他依賴。這就意味著我們可以在任意我們想要的地方去使用。
- composer 安裝 symfony/console 元件。
- 按照規範編寫 console 應用程式(等於 artisan )。
- 按照規範編寫 commands (命令)。
- 大功告成。
composer require symfony/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();
這裡需要注意自動載入問題!
"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.');
}
}