2017-08-25 43 views
1

別のコマンドからArtisan(Laravel)コマンドを1つ呼び出そうとしています。しかし、私はドキュメントに目を通していると見つけることができませんあるArtisanコマンドから別のArtisanコマンドへの戻り値

// Command 1 
public function handle() { 
    $returnedValue = $this->call('test:command'); 

    dump($returnedValue); // <-- is 5 

} 

// Command 2 
public function handle() { 
    return $this->returnValue(); 

} 

private function returnValue() { 
    $val = 5; 
    return $val; 
} 

つまり...「メイン」コマンドから呼び出されたコマンドからの配列を取得できるようにする必要がありますこれを行う方法は、私は方法があったか、私は私のアプローチを再考する必要があるかどうか疑問に思っていた。

ありがとうございます!

答えて

1

アーティザンコマンドは、コントローラ機能などと同じように動作しません。彼らはexitCodeを返します。私のテストでは常に0でした(エラーがスローされた場合は何も返されませんでした)。

戻り値を取得しようとすると、あなたのアプローチは機能しませんが、\Artisan::output();にアクセスして、あなたが呼び出した最初の職人コマンドによって正確に何が送信されたかを確認できます。

// FirstCommand.php 
public function handle(){ 
    \Artisan::call("second:command"); 
    if(\Artisan::output() == 1){ 
    $this->info("This Worked"); 
    } else { 
    $this->error("This Didn't Work"); 
    } 
} 

注:私は\Artisan::call()を使用。 2つの間に明らかな違いがあります。$this->call()を使用しても期待通りには動作しませんでしたが、\Artisan::call()がありました。 $this->call()は、実行されている実際のコードにかかわらず、0との両方を返します。そこに何があるか分からない。現在のかなり後ろにあるLaravel 5.0でテストされています。

私のコンソールに戻りにおける php artisan first:command実行
// SecondCommand.php 
public function handle(){ 
    try { 
    $test = 1/1; 
    } catch (\Exception $ex){ 
    $this->error("0"); 
    } 

    $this->info("1"); 
} 

:最初

$ PHPの職人を:

$testのコードを切り替えた場合、コマンド

これは、今

を働い

$test = 1/0; 

私は私のコンソールでこれを取得する:最初

$ PHPの職人:コマンド

これは

だから、私は推測し、ここでのルールはには何も出力しないようにすることです動作しませんでした結果の前に2番目のコマンドを\Artisan::output()でチェックします。

関連する問題