イントロダクション

アプリケーションで動作する追加のカスタムコマンドを構築することも可能です。app/commandsディレクトリーにカスタムコマンドを保存してください。しかし、コマンドがオートロードされるようにcomposer.jsonを設定する限り、どこにでも好きな場所に置くことができます。

コマンドの構築

クラスを生成する

新しいコマンドを生成するには、Artisanコマンドのcommand:makeを使用し、開発開始の手助けとなるコマンドスタブを生成してください。

新しいコマンドクラスを生成する

php artisan command:make FooCommand

デフォルトでは、生成されたコマンドはapp/commandsディレクトリーに保存されます。しかし、独自のパスか名前空間を指定することもできます。

php artisan command:make FooCommand --path=app/classes --namespace=Classes

--commandオプションを付け、コマンドを生成すると、コマンド名を指定することができます。

php artisan command:make AssignUsers --command=users:assign

コマンドを書く

コマンドを生成したら、クラスのnamedescriptionプロパティーを埋めてください。listスクリーンであなたのコマンドを表示する時に使用されます。

fireメソッドはコマンドが実行される時に呼び出されます。このメソッドの中に、コマンドロジックを書いてください。

引数とオプション

getArgumentsgetOptionsメソッドでコマンドが受け取る引数とオプションを定義します。両者のメソッドはオプションを配列のリストで記述した、コマンドの配列をリターンします。

argumentsを定義する定義配列は以下のような形式です。

array($name, $mode, $description, $defaultValue)

引数modeInputArgument::REQUIREDInputArgument::OPTIONALのどちらかです。

optionsを定義する定義配列は以下のような形式です。

array($name, $shortcut, $mode, $description, $defaultValue)

オプションでは、引数modeInputOption:REQUIREDInputOption::OPTIONALInputOption::VALUE_IS_ARRAYInputOption::VALUE_NONEのどちらかです。

VALUE_IS_ARRAYモードはコマンド実行時に複数回指定されるスイッチを表します。

php artisan foo --option=bar --option=baz

VALUE_NONEオプションは「スイッチ」として指定されるオプションを表します。

php artisan foo --option

入力の取り込み

コマンド実行時、アプリケーションが受け取った引数やオプションの値にアクセスする必要があるのは明らかです。これを行うには、argumentoptionメソッドを使用します。

コマンド引数の値を取得する

$value = $this->argument('name');

全ての引数を取得する

$arguments = $this->argument();

コマンドオプションの値を習得する

$value = $this->option('name');

全てのオプションを取得する

$options = $this->option();

出力

コンソールに出力するには、infocommentquestionerrorメソッドを使います。その名前が表す目的で使用し、それぞれ適当なANSIカラーが表示に使われます。

お知らせをコンソールに送る

$this->info('Display this on the screen');

エラーメッセージをコンソールに送る

$this->error('Something went wrong!');

質問

入力を求めるためにaskconfirmメソッドも使用できます。

ユーザーに入力を求める

$name = $this->ask('What is your name?');

ユーザーに秘密の文字列の入力を求める

$password = $this->secret('What is the password?');

ユーザーに確認を求める

if ($this->confirm('Do you wish to continue? [yes|no]'))
{
    //
}

また、confirmメソッドにはtruefalseのデフォルト値が指定できます。

$this->confirm($question, true);

コマンドの登録

Artisanコマンドを登録する

作成し終えたコマンドを使用するためにArtisanに登録する必要があります。通常、app/start/artisan.phpファイルで行います。このファイルの中で、Artisan::addメソッドをコマンドの登録に使用してください。

Artisan::add(new CustomCommand);

IoCコンテナの中のコマンドを登録する

コマンドをアプリケーションのIoCコンテナに登録している場合、Artisanで使用可能にするにはArtisan::resolveメソッドを使います。

Artisan::resolve('binding.name');

サービスプロバイダーによるコマンド登録

サービスプロバーダー内でコマンドを登録する必要があるときは、プロバイダーのbootメソッドから、そのコマンドのIoCコンテナへの結合名を渡し、commandメソッドを呼び出してください。

public function boot()
{
    $this->commands('command.binding');
}

他のコマンドを呼び出す

場合により、コマンドの中から他のコマンドを呼び出したい場合もあります。callメソッドを使ってください。

$this->call('command:name', array('argument' => 'foo', '--option' => 'bar'));