从 artisan 命令重定向到 URL
Redirect to URL from artisan command
我正在使用 Laravel 5.4。我有一个 artisan 命令,通常由 cron 运行,但它也可以由网站内的用户 运行。用户在页面 /customer/123
上,然后单击带有 link 的按钮到 /customer/vat/123
,artisan 命令完成其工作并且应将浏览器重定向回 /customer/123
, 但由于某种原因不是。
我的路线如下所示:
Route::get('customer/vat/{id}', function ($id) {
Artisan::call('app:reminder', [
'--vat' => $id
]);
});
整个事情 运行 都符合预期,只是重定向没有任何作用。日志中没有错误消息,只有空白页。
在最底部的 artisan 命令中,我有:
return redirect::to('/customer/123');
我希望将我重定向到上面的 URL,但事实并非如此。
我是否需要使用其他功能从 artisan 命令中重定向?
首先,您的 artisan 命令 return 有一些东西,但您没有 return 在您的路径关闭中执行任何操作。很明显,结果将是空的。
其次,即使你说 return Artisan::call('...');
它也不会起作用,因为 call 方法 returns 是控制台命令的退出状态,而不是你的输出return在artisan命令的handle
方法中。
最后,Artisan 命令永远不会 return view
。想一想,为什么 artisan 命令会 return 视图? Artisan 命令是控制台命令,而不是 return responses
到 requests
。你有控制器
要解决这个问题,您可以这样做:
Route::get('customer/vat/{id}', function ($id) {
Artisan::call('app:reminder', [
'--vat' => $id
]);
return redirect()->to('/customer/123');
});
然后从您的 artisan 命令句柄方法中删除 return redirect()->to('/customer/123');
我同意 Paras 的分析,这是对 Artisan 命令的一种尴尬用法。我认为 'right' 是为了处理这种情况,将 abstract-out 将命令 class 中的功能转换为命令和端点都可以转向的全新 class对于他们的大多数 heavy-lifting.
但是,如果出于某种原因这不可行,您可以让命令输出用于重定向的 URI。正如 Paras 所提到的,return
来自 Artisan 命令的东西是没有用的,我想补充一点,对 echo
它们也是一种不好的做法。相反,您使用命令方法将字符串发送到您配置的任何输出缓冲区。
$this->info($yourRedirectUrI);
最后,要让您的端点闭包看到该输出,请使用 Artisan::output()
方法:
Route::get('customer/vat/{id}', function ($id) {
Artisan::call('app:reminder', [
'--vat' => $id
]);
redirect(Artisan::output());
});
我正在使用 Laravel 5.4。我有一个 artisan 命令,通常由 cron 运行,但它也可以由网站内的用户 运行。用户在页面 /customer/123
上,然后单击带有 link 的按钮到 /customer/vat/123
,artisan 命令完成其工作并且应将浏览器重定向回 /customer/123
, 但由于某种原因不是。
我的路线如下所示:
Route::get('customer/vat/{id}', function ($id) {
Artisan::call('app:reminder', [
'--vat' => $id
]);
});
整个事情 运行 都符合预期,只是重定向没有任何作用。日志中没有错误消息,只有空白页。
在最底部的 artisan 命令中,我有:
return redirect::to('/customer/123');
我希望将我重定向到上面的 URL,但事实并非如此。
我是否需要使用其他功能从 artisan 命令中重定向?
首先,您的 artisan 命令 return 有一些东西,但您没有 return 在您的路径关闭中执行任何操作。很明显,结果将是空的。
其次,即使你说 return Artisan::call('...');
它也不会起作用,因为 call 方法 returns 是控制台命令的退出状态,而不是你的输出return在artisan命令的handle
方法中。
最后,Artisan 命令永远不会 return view
。想一想,为什么 artisan 命令会 return 视图? Artisan 命令是控制台命令,而不是 return responses
到 requests
。你有控制器
要解决这个问题,您可以这样做:
Route::get('customer/vat/{id}', function ($id) {
Artisan::call('app:reminder', [
'--vat' => $id
]);
return redirect()->to('/customer/123');
});
然后从您的 artisan 命令句柄方法中删除 return redirect()->to('/customer/123');
我同意 Paras 的分析,这是对 Artisan 命令的一种尴尬用法。我认为 'right' 是为了处理这种情况,将 abstract-out 将命令 class 中的功能转换为命令和端点都可以转向的全新 class对于他们的大多数 heavy-lifting.
但是,如果出于某种原因这不可行,您可以让命令输出用于重定向的 URI。正如 Paras 所提到的,return
来自 Artisan 命令的东西是没有用的,我想补充一点,对 echo
它们也是一种不好的做法。相反,您使用命令方法将字符串发送到您配置的任何输出缓冲区。
$this->info($yourRedirectUrI);
最后,要让您的端点闭包看到该输出,请使用 Artisan::output()
方法:
Route::get('customer/vat/{id}', function ($id) {
Artisan::call('app:reminder', [
'--vat' => $id
]);
redirect(Artisan::output());
});