我正在使用Laravel 5.4。我有一个通常由cron运行的工匠命令,但它也可以由用户在网站内运行。用户在页面/customer/123
上,然后点击一个带有/customer/vat/123
链接的按钮,artisan命令完成其工作并应将浏览器重定向回/customer/123
,但不是出于某种原因。
我的路线看起来像这样:
Route::get('customer/vat/{id}', function ($id) {
Artisan::call('app:reminder', [
'--vat' => $id
]);
});
整个事情按预期运行只是重定向什么也没做。日志中没有任何错误消息,只是一个空白页。
在最底层的工匠指令中,我有:
return redirect::to('/customer/123');
我希望只是将我重定向到上面的网址,但事实并非如此。
我是否需要使用其他功能从artisan命令中重定向?
答案 0 :(得分:5)
首先,你的工匠命令会返回一些东西,但你在路线封闭中没有返回任何东西。很明显,结果将是空的。
其次,即使您说return Artisan::call('...');
它也不会起作用,因为call方法返回控制台命令的退出状态,而不是http://answers.unity3d.com/questions/45892/unity-unit-scale.html返回的输出。 1}}工匠命令的方法。
最后,Artisan命令永远不会返回handle
。想一想,为什么工匠命令会返回视图? Artisan命令是控制台命令,并不是要将view
返回responses
。你有控制器
要解决此问题,您可以执行以下操作:
requests
然后从artisan命令句柄方法中删除Route::get('customer/vat/{id}', function ($id) {
Artisan::call('app:reminder', [
'--vat' => $id
]);
return redirect()->to('/customer/123');
});
答案 1 :(得分:0)
我同意Paras的分析,这对Artisan命令来说有点尴尬。我认为'正确'处理这种情况的方法是将命令类中的功能抽象为一个全新的类,命令和端点都可以转向大部分繁重的工作。
但是,如果由于某种原因这不可行,您可以使命令输出用于重定向的URI。正如帕拉斯所提到的那样,对于return
来自Artisan命令的东西来说它是无用的,而且我还会给echo
他们添加一些不好的做法。而是使用Command方法将字符串发送到您配置的任何输出缓冲区。
$this->info($yourRedirectUrI);
最后,要使端点闭包看到该输出,请使用Artisan::output()
方法:
Route::get('customer/vat/{id}', function ($id) {
Artisan::call('app:reminder', [
'--vat' => $id
]);
redirect(Artisan::output());
});