Copy & Paste Engineer

【Laravel】Command を Contoroller や Command から実行する方法

【Laravel】Command を Contoroller や Command から実行する方法

Laravel で Command を Contoroller や Command から実行する方法メモ。 諸事情で Controller や 別Command から実行するためのメモです。

Command 呼び出し方法

以下の3つの方法があります。

Artisan::call()

Laravelの公式に記載されています。 Laravel 8.x Artisanコンソール#プログラムからのコマンド実行

ControllerやCommandから実行することが可能で返り値を受け取ることもできます。 この方法を利用すると呼び出された側のコメントなどの出力がされません

use \Artisan;

$result = Artisan::call('command:sample', [
    '--argument' => 'hoge',
]);
dd($result);

$this->call()

Laravelの公式に記載されています。 Laravel 8.x Artisanコンソール#他コマンドからのコマンド呼び出し

Commandからのみしか利用ができません。 この方法を利用すると呼び出された側のコメントなどの出力がされます

$result = $this->call('command:sample', [
    '--argument' => 'hoge',
]);
dd($result);

exec

exec はコマンドを実行する関数です。 PHP: exec - Manual

ただし、そのため引数を適当に渡したりするとOSコマンドインジェクションなどの危険性があるのでオススメしません。 また exec の場合はLaravelを1から実行するため他の方法と比べて遅くなります。

exec('php artisan command:sample --argument=hoge')