我正在为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属性,但是文档尚不清楚如何使用它。
答案 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();
这就是做不好的事情的方法,但是,它将起作用。