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();
这就是每件事都做不好的方法,但它会奏效。
我正在为 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();
这就是每件事都做不好的方法,但它会奏效。