SymfonyのCommand
CLIで実行するコマンドを定義する
Symfony 4.2以降では、config/services.yamlに手動で登録する必要はない
$ php bin/console
利用可能なコマンド一覧を表示
$ php bin/console debug:container
サービスコンテナに登録されたサービスの一覧を表示
規定のmethodsが決まっている
execute(InputInterface $input, OutputInterface $output)
必須
実行したい処理を記述する
InputInterfaceを使用して引数やオプションを取得する
OutputInterfaceで出力内容を設定する
configure()
必須
コマンド名、説明、引数、オプションなどの指定をする
initialize()
execute()の前に実行される
コマンドの実行前の準備や初期化処理を行う
interact()
コマンドの対話処理を行う
通常は必要な引数やオプションが指定されていない場合にユーザーに入力を求める
例
code:php
// src/Command/GreetCommand.php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
class GreetCommand extends Command
{
// コマンドの名前を定義
protected static $defaultName = 'app:greet';
protected function configure()
{
$this
->setDescription('挨拶を表示するコマンド')
->addArgument('name', InputArgument::OPTIONAL, '挨拶する名前')
->addOption('yell', null, InputOption::VALUE_NONE, '大文字で出力するオプション');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
// 引数とオプションを取得
$name = $input->getArgument('name') ?? 'World';
$text = 'Hello ' . $name;
if ($input->getOption('yell')) {
$text = strtoupper($text);
}
// 出力
$output->writeln($text);
// コマンドが正常終了したことを示すため、0を返す
return Command::SUCCESS;
}
}
WIP
optionとかも指定できるの
configure()内でaddArgumentして、execute()などでは$inputからアクセスできる
serviceにアクセスする
出力のstyleの設定
bin/consoleって付けなくても実行できる設定があったはず
この2種類はなに
引数のoutputを使う
SymfonyStyleを使う
Controllerにはアクセスできる?
普通にできたmrsekut.icon
constructorから呼べば
しかし、これはそもそもこうするものなのか?
req送ればそれで済むはずなのでちょっと変化もしれない
reqでdownloadってできるのか