在Laravel中返回重定向时出错


Error when trying to return Redirect in Laravel

当我在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')的消息