カスタムコマンドって?
Laravelには「php artisan
」で始まる様々なコマンドが用意されています。クラスを作成する「make:〇〇」系コマンドはよく使いますね。
そんなコマンドを自作することができます。それがカスタムコマンドです。
カスタムコマンドをつくってみよう!
例として、ユーザーテーブルからユーザー名を取得してコンソールに出力するコマンドを作成していきます。
カスタムコマンドの作成
php artisan make:command UserName
UserNameの部分はクラス名になります。このコマンドを実行するとapp\Console\Commandsの下にファイルが作成されます。
コマンド名と説明文を設定
protected $signature = 'user:name {id}';
protected $description = 'ユーザー名を出力する';
$signatureはコマンド名です。自由につけて良いのですが、Laravelのデフォルトコマンド「make:〇〇」や「migrate:〇〇」のように、コマンド名にコロンを入れると、一覧表示した時にグループ化して表示してくれるのでオススメ。
コマンドに引数を付ける場合は{}で定義します。今回はidをキーにして名前を取得したいのでidを引数にしています。
$descriptionは「php artisan list
」とかで一覧表示した時のコマンド説明文です。
実行する処理を記載
handle()の中に書いた処理が実行されます。この部分はコントローラとかに書くのと同じ要領で処理を書いていけばOKです。
今回は「ユーザーテーブルからユーザー名を取得してコンソールに出力する」処理を書いていきます。
public function handle()
{
// 引数を取得
$id = $this->argument('id');
// idが一致するユーザーを取得
$user = User::find($id);
// ユーザー名を取得
$userName = $user ? $user->name : '名無しさん';
// コンソールに出力
$this->info("ユーザー名: $userName");
}
(端折ってますが、Userモデルを定義してuse宣言している前提です。)
これでコマンド作成完了です!わお、簡単!
コマンドを実行してみよう!
php artisan user:name 1
自作したコマンドを実行してみましょう。
id=1のユーザーがいれば「ユーザー名: 〇〇」、該当ユーザーがいなければ「ユーザー名: 名無しさん」とコンソールに出力されていれば成功です。