Laravelのコマンドに引数を使う方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
Laravel では php artisan コマンドを自作することができます。この記事では、そのコマンドの作り方とコマンドに対して引数を使う方法についてまとめています。
環境
Laravel Framework 8.60.0
最終的にどうなるか?
コマンドに引数をつけることで、その引数をコマンドの関数の中で使うことが可能になります。
php artisan asitakara-ganbaru 明後日は休む
"明後日は休む"
コマンドを作る
最初に、「コマンドを作る」ということは、
php artisan 任意の名前
でコマンドを打てるようになります。
知らない段階だとビビりますが、恐ろしく簡単に作ることができます。
コマンドでファイルを作成する
php artisan make:command TestCommand
TestCommand というファイル名で作成しました。
App\Console\Commands\TestCommand.php
にファイルが作成されていることを確認してみてください。
コマンド名を決める(php artisan ?? の??を決める)
TestCommand.php を開いて、下記の記述がある場所を探してください
protected $signature = 'command:name';
この場所を変更すれば良いです。任意のなんでも良い文字列を書くことができますので、分かりやすい名前をつけます。
protected $signature = 'asitakara-ganbaru';
次に、このコマンドで実行する関数を書きます
下記の記述がある場所を探してください
public function handle()
{
return 0;
}
こちらの記述を下に書き換えます。
public function handle()
{
dd('明日からがんばる');
}
コマンドを実行してみる
コマンドを打ってみます。
php artisan asitakara-ganbaru
"明日からがんばる"
このように表示されたら成功です。
コマンドが実行されました。
引数を設定する
続いて、本題である引数を設定してみます。
protected $signature = 'asitakara-ganbaru {text}';
public function handle()
{
$text = $this->argument('text');
dd($text);
}
このようにコードを変更してみてください。
引数で使いたい名前を signature で設定し、$this->argument で呼び出します。
実際にコマンドを引数付きで打ってみます。
php artisan asitakara-ganbaru 明後日は休む
"明後日は休む"
うまくいきました!
optional の設定
この記述だと、必ず引数を設定しないとコマンドが下記のようなエラーになります。
Not enough arguments (missing: "text").
ですので、引数がなくても実行できるようにしたい場合は、optional を設定します。
protected $signature = 'asitakara-ganbaru {text?}';
?を付け足しただけです。
これで実行すると、
php artisan asitakara-ganbaru
null
optional の設定が可能になりました。
デフォルトの設定
引数が空の時、デフォルトの設定が可能です。
protected $signature = 'asitakara-ganbaru {text=明日から頑張る}';
実行します。
php artisan asitakara-ganbaru
"明日から頑張る"
配列の引数
protected $signature = 'asitakara-ganbaru {text*}';
hp artisan asitakara-ganbaru 明日から頑張る 明後日も頑張る
array:2 [
0 => "明日から頑張る"
1 => "明後日も頑張る"
]
配列の optional
protected $signature = 'asitakara-ganbaru {text?*}';
関連記事
Laravel の make:command はどんな時に使うのか?
まとめ
以上です。
この記事はLaravel のドキュメントに書かれた内容を実際に例を出しながら動かしてみた記事となります。
最初はどこに何が書いてあるか分からないと思いますが、徐々に慣れていきましょう。
感想・苦情は TwitterDM にご連絡ください。
それでは!
人気記事