尝试在Laravel中返回重定向时出错

时间:2015-09-24 15:38:54

标签: php laravel laravel-4

当我在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));
    }

...这完全没用,因为它只是向我展示了打印错误本身的代码。

2 个答案:

答案 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')

在会话中添加了一条消息