laravel

LaravelのCommandをアプリケーション内部から直接実行する方法

Commandをコマンドライン環境でなくアプリケーションの内部から直接実行する方法を紹介します。

実装方法

そのためにArtisanファサードのcallメソッドを利用します。

第1引数に実行するコマンド名、第2引数に配列で指定します。(配列のキーが引数名なので必要な値を指定します)。

//引数なし
Route::get('/no_arg',function(){
    Artisan::call('no-args-command');
});
//引数あり
Route::get('/with_arg',function(){
    Artisan::call('with-args-command',[
        'arg' => 'value',
        '-switch' => false,
    ]);
});

Artisanファサードを使用しない場合はインジェクトを用いてcallメソッドでCommandが実行できます。

use Illuminate\Contracts\Console\Kernel;
Route::get('/no_arg',function(Kernel $artisan){
    $artisan->call('no-args-command');
});

commandクラスの中から他のコマンドを実行する場合はcommandクラスのcallメソッドでも代用が可能で、引数の指定方法はArtisan::callメソッドと同じです。

public function handle()
{
    $this->call('other-command');
}

使用したコード

https://github.com/kt5007/laravel-command

参考文献

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

サイト

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