因為最近想寫個自己的小東西,準備寫個console程式生成curd常用的程式碼所以找到了
symfony/console
元件,以下是對該元件的一點簡單的學習記錄
一.下載和簡單使用
1. 下載
composer require symfony/console @stable
2. 建立TestCmd類
我的類是建立在
App\Console\TestCmd
下的,程式碼如下
<?php
namespace App\Console;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class TestCmd extends Command
{
public function __construct($name = null)
{
parent::__construct($name);
}
protected function configure()
{
$this
// 命令的名稱
->setName('test')
// 簡短描述
->setDescription('Create curd')
// 執行命令時使用 "--help" 選項時的完整命令描述
->setHelp('Create curd')
//->addArgument('optional_argument', InputArgument::REQUIRED, 'this is a optional argument');
->setDefinition([
new InputArgument('name', InputArgument::REQUIRED, 'controller,service,model 名稱'),
new InputOption('controller', 'c', InputOption::VALUE_NONE, '生成controller'),
new InputOption('service', 's', InputOption::VALUE_NONE, '生成Service'),
new InputOption('model', 'm', InputOption::VALUE_NONE, '生成model'),
new InputOption('no-to-cc', 'no-tcc', InputOption::VALUE_NONE, '不轉換name為大駝峰'),
]);
}
protected function execute(InputInterface $input, OutputInterface $output)
{
//列印
$output->writeln([
'gen model',
]);
$output->writeln('name: ' . $this->toCamelCase($input->getArgument('name'), true));
$output->writeln('controller: ' . $input->getOption('controller'));
$output->writeln('service: ' . $input->getOption('service'));
$output->writeln('model: ' . $input->getOption('model'));
$output->writeln('no-to-cc: ' . $input->getOption('no-to-cc'));
return 1;
}
//下劃線命名到駝峰命名
function toCamelCase($str, $toOne = false)
{
$array = explode('_', $str);
$result = $toOne ? ucfirst($array[0]) : $array[0];
$len = count($array);
if ($len > 1) {
for ($i = 1; $i < $len; $i++) {
$result .= ucfirst($array[$i]);
}
}
return $result;
}
}
配置一個引數的兩種方式
- setDefinition 以陣列方式配置引數
new InputArgument 配置引數 引數順序為 : 引數name 模式mode 描述 預設值
new InputOption 配置選項 引數順序為 : 引數name 是否有短引數 如 --service 可配置 -s 模式mode 描述
- addArgument 配置單個引數
常用模式
mode:
InputArgument::OPTIONAL 可選引數 php console.php -s Test
InputArgument::REQUIRED 必傳引數 php console.php --xx Test
InputArgument::VALUE_NONE 可選不用傳值 不能有預設值 -x
InputArgument::VALUE_REQUIRED 可選 使用了必須傳值 如: --xx 值
InputArgument::VALUE_OPTIONAL 可選 可傳值可不傳
2. 在專案根目錄建立console.php檔案
<?php
require __DIR__.'/vendor/autoload.php';
use App\Console\TestCmd;
use Symfony\Component\Console\Application;
$application = new Application();
$application->add(new TestCmd());
$application->run();
the end,以後用熟悉在修改
本作品採用《CC 協議》,轉載必須註明作者和本文連結