Laravel,从调用方法获取返回值

时间:2018-08-21 19:08:14

标签: php laravel shell laravel-5 artisan

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

2 个答案:

答案 0 :(得分:1)

handle返回的信息最终转到这一行:

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

因此,如果在命令Two中返回2,则结果$returnedValue将为2,但是如果返回数组或'test'字符串,则它将为0。

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

中使用该存储的结果

答案 1 :(得分:0)

实际上,如果您忽略所有最佳实践,则几乎可以从命令返回任何内容。例如代替

return $myarray;

通过is_numeric过滤器进行过滤,您只需

print_r($myJsonArray);

以及其他命令

ob_start();

//调用其他命令

$return = ob_get_clean();

这就是做不好的事情的方法,但是,它将起作用。