laravel

LaravelのCommandで任意の引数を受け取る方法

Commandはコマンドラインで実行する場合に任意の引数を受け取ることができます。

$signatureプロパティで受け取る可能性のある引数をしています。

今回の記事は前回の記事の続きとなっています。

https://www.kenjin.work/laravel-command-class/

実装

コマンド引数

引数名を{foo}のようにカーリーブレイスで囲います。

下記のように引数nameを指定します。

// /app/Console/Commands/HelloCommand.php
protected $signature = 'hello:class {name}';

コマンド実行時に指定する引数の値はargumentメソッドで取得します。

argumentメソッドの引数には$signatureプロパティで指定した引数名を指定します。

// app/Console/Commands/HelloCommand.php    
public function handle() // コマンドの実行内容
{
    $name = $this->argument('name');
    $this->comment('Hello'.$name);
}

コマンド引数は実行コマンド名の後ろに半角スペースを空けて指定します。

$ php artisan hello:class john

// 結果
Hello john

しかしカーリーブレイスで囲んだコマンド引数は必須なので省略するとエラーとなります。

$ php artisan hello:class

// 結果
Not enough arguments (missing: "name").

コマンド引数の指定には様々な方法があります。

下記の表のように引数を指定できます。

コマンド引数内容
{name}引数を文字列として取得。省略するとエラー。
{name?}引数を文字列として取得。諸略可能。
{name=default}引数を文字列として取得。省略時、=の右辺がデフォルト値。
{name*}引数を配列として取得。省略するとエラー。
{name : description}「:」(コロン)以降に説明を記述できる。コロン前後にスペース必要。

オプション引数

オプション引数はスイッチのように指定した項目を有効にする場合など使用します。

{}でオプション引数名を囲み、引数名の銭湯に–を指定することでオプション引数になります。

今回は–switchをオプション引数として指定します。

// app/Console/Commands/HelloCommand.php    
protected $signature = 'hello:class {--switch}';

コマンド実行の時にオプション引数が指定されたかはoptionメソッドで取得します。

コマンド実行時にオプション引数が指定されればtrue、指定されていなければfalseを返します。

今回は–switchが指定されたかによって出力される文字列が切り替わるようにしています。

// app/Console/Commands/HelloCommand.php    
public function handle() // コマンドの実行内容
{
    $switch = $this->option('switch');
    $this->comment('Hello '.($switch ? 'ON' : 'OFF'));
}

今回の実装をコマンドで実行すると下記のようになります。

–switchオプションの有無によって出力される文字列が変わります。

$ php artisan hello:class --switch 
//結果
Hello ON

$ php artisan hello:class 
//結果
Hello OFF

また下記の表のようなオプション引数が指定できます。

コマンド引数内容
[–switch]引数を論理値として取得。指定時true、省略時false。
[–switch=]引数を文字列として取得。省略可能。
[–switch=default]引数を文字列として取得。省略すると=の右辺がデフォルト値。
[–switch=*]引数を配列として取得。実行時に–switch=1,–switch=2と指定すると[‘1′,’2’]となる。
[–switch : description]:以降に説明を記述できる。コロンの前後にスペースが必要。

参考文献

PHPフレームワーク Laravel Webアプリケーション開発 バージョン8.x対応

サイト

https://laravel.com/docs/6.x/artisan