Laravel,获取call方法的返回值

Laravel, get the returned value from call method

我正在为 laravel 编写一些自定义命令,我需要从一个命令调用另一个命令获取返回值,例如:

class One extends Illuminate\Console\Command
{
  protected $signature = 'cmd:one';

  public function handle()
  {
    // call 'Two' and uses the api information to continue
    $returnedValue = $this->call('cmd:two');

    dd($returnedValue) // int(1) ?? it seems to show exit code
  }
}



class Two extends Illuminate\Console\Command
{
  protected $signature = 'cmd:two';

  public function handle()
  {
    // this command retrieves some api information needed to continue
    return $infoFromAPI;
  }
}

我也试过静态调用 Artisan::call(...) 结果相同。

我知道有一个 $output 属性 但文档不清楚如何使用它。

来自 handle 的信息 return 最终转到此行:

return is_numeric($statusCode) ? (int) $statusCode : 0;

所以如果在命令 Two 中你 return 2 那么结果 $returnedValue 将是 2 但如果你 return 数组或 'test'字符串它将是 0.

所以事实上你不能这样做。命令的结果必须是数字,所以你不能 return 例如数组并在另一个命令中重用它。事实上,我认为 运行 另一个命令没有多大意义。您应该创建将调用端点和 return 结果的服务,如果您需要这 2 个命令,那么您可以在 2 个命令中调用此服务并获取结果,或者如果您不能这样做,您应该将结果从一些存储 (database/cache),然后在命令 One

中使用此存储的结果

事实上,如果您忽略所有最佳实践,您可以 return 从命令中获得任何您喜欢的东西。例如而不是

return $myarray;

通过 is_numeric 过滤器进行过滤,您可以

print_r($myJsonArray);

并在您的其他命令中

ob_start();

//调用其他命令

$return = ob_get_clean();

这就是每件事都做不好的方法,但它会奏效。