当我在Laravel中提交表单时,下面的控制器方法处理它:
public function update($id)
{
//handle input
return View::make('generic.success', ["message" => 'Data submitted successfully!']);
}
这很好。但是,我想返回一个重定向,而不是像上面那样返回一个视图,因为当我直接返回视图时,重新加载页面会重新提交表单。
所以我试着这样做:
public function update($id)
{
//handle input
return Redirect::to('/success', ['message' => 'Data submitted successfully!']);
}
在我的路由文件中,我定义了成功路由:
Route::get('success', 'NotificationsController@success');
设置一个通知控制器来显示视图:
class NotificationsController extends BaseController {
public function success($message)
{
return View::make('generic.success', ["message" => $message]);
}
当我运行上面的代码时,我从Laravel得到以下错误:
InvalidArgumentException
The HTTP status code "1" is not valid.
我不知道这应该告诉我什么,显然谷歌也不知道。
有人能解释一下这个问题吗?
公立小学顺便说一句,作为Laravel的新手,我注意到到目前为止,Laravel的错误报告非常不友好,它不是告诉我我的路由器,控制器或权限有问题,而是显示这些通用错误,没有对其原因进行人性化的解释。在Laravel中,是否有比依赖这个更好的方法来解决问题?
例如,在上述事件中,错误报告指向这行代码…
public function setStatusCode($code, $text = null)
{
$this->statusCode = $code = (int) $code;
if ($this->isInvalid()) {
throw new 'InvalidArgumentException(sprintf('The HTTP status code "%s" is not valid.', $code));
}
…这是完全无用的,因为它所做的只是向我展示打印错误本身的代码。
重定向器的to()
方法的第二个参数是响应将返回的HTTP状态码,而不是将传递的数据。当重定向到GET
路由时,可以通过查询字符串或会话来传递数据。这里推荐的解决方案是使用with()
方法通过当前会话传递数据,该方法将该数据传递给下一个请求。因此,在您的情况下,这将是需要的方法:
public function update($id)
{
return Redirect::to('/success')->with('message', 'Data submitted successfully!');
}
然后在你的success
方法中,你可以这样做:
public function success($message)
{
return View::make('generic.success', ["message" => Session::get('message')]);
}
当有疑问时,总是先检查文档。这个问题的解决方案在Laravel Response Redirects Documentation中有明确的说明。
非常感谢-Bogdan,我在文档中发现了您对我的问题的回答。在我的情况下,解决方案是重定向到控制器中的一个动作,像这样…
return
'Redirect::action(
'PqrController@solicitud',
array($id)
)
->with(
'message',
'¡El estado de la solicitud ha sido actualizado correctamente!'
)
;
我重定向到控制器中的方法,有一个参数array($id)
,我也在会话中使用->with('message','Mensaje')
的消息