首页 > 解决方案 > Laravel,从调用方法中获取返回值

问题描述

我正在为 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 属性,但文档不清楚如何使用它。

标签: phplaravelshelllaravel-5laravel-artisan

解决方案


handlefinally 返回的信息到这一行:

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

因此,如果在命令中Two返回2,则结果$returnedValue将为 2,但如果返回数组或“测试”字符串,则结果将为 0。

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


推荐阅读