当我在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.
我不知道这应该告诉我什么,谷歌也不明白。
有人可以解释这个问题吗?
P.S。
顺便说一句,作为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));
}
...这完全没用,因为它只是向我展示了打印错误本身的代码。
答案 0 :(得分:2)
重定向器的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中明确说明了解决方法。
答案 1 :(得分:0)
非常感谢-Bogdan我在文档中发现你发布了我的问题的答案。在我的情况下,解决方案被重定向到控制器中的一个动作,就像这样......
return
\Redirect::action(
'PqrController@solicitud',
array($id)
)
->with(
'message',
'¡El estado de la solicitud ha sido actualizado correctamente!'
)
;
我重定向到控制器中的方法,其中包含一个参数array($id)
,我使用->with('message','Mensaje')