LaravelのartisanコマンドでgetArguments()やgetOptions()を使う時はコマンド名の指定に$nameを使う必要がある
LaravelのArtisanで自作Commandクラスを使う時に躓いたのでメモ
LaravelでArtisanコマンドを作る時に以下のようにコマンド名を指定する($signature
を使う)とgetArguments()
やgetOptions()
が読まれない。
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class HogeCommand extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = "test:hoge"; /** * The console command description. * * @var string */ protected $description = "Test command"; /** * Execute the console command. * * @return mixed */ public function handle() { dd($this->argument()); } /** * Get the console command arguments. * * @return array */ protected function getArguments() { return [ ["files", InputArgument::IS_ARRAY, "Files"], ]; } }
これでtest:hoge
コマンドを実行してもfiles
引数は読まれない。
理由
HogeCommand
内でコマンド名の指定に$signature
を使っているから。
$signature
での指定は以下のリンクにあるように、$signature
で名前だけでなく引数やオプションも指定する時に使う。
http://readouble.com/laravel/5/1/ja/artisan.html
修正する
$signature
では無く$name
でコマンド名を定義すればgetArguments()
やgetOptions()
が読まれる。
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class HogeCommand extends Command { /** * The name of the console command. * * @var string */ protected $name = "test:hoge"; /** * The console command description. * * @var string */ protected $description = "Test command"; /** * Execute the console command. * * @return mixed */ public function handle() { dd($this->argument()); } /** * Get the console command arguments. * * @return array */ protected function getArguments() { return [ ["files", InputArgument::IS_ARRAY, "Files"], ]; } }
これでfiles
引数が動く