【问题标题】:Error when trying to return Redirect in Laravel尝试在 Laravel 中返​​回重定向时出错
【发布时间】:2017-08-25 11:43:23
【问题描述】:

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

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

【问题讨论】:

  • 当你使用redirect::to()函数时,它显示错误?
  • 是的。当我返回一个视图(或其他任何东西)时,它很好。

标签: php laravel laravel-4


【解决方案1】:

重定向器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 中明确说明了此问题的解决方案。

【讨论】:

    【解决方案2】:

    非常感谢 -Bogdan,我在文档中发现您发布了对我的问题的答案。在我的情况下,解决方案是重定向到控制器中的一个动作,就像这样......

    return 
        \Redirect::action(
            'PqrController@solicitud',
            array($id)
        )
        ->with(
            'message',
            '¡El estado de la solicitud ha sido actualizado correctamente!'
        )
    ;
    

    我重定向到控制器中的一个方法,带有一个参数array($id),我也在会话中使用->with('message','Mensaje')添加了一条消息

    【讨论】:

      猜你喜欢
      • 2021-08-06
      • 1970-01-01
      • 2018-02-09
      • 2021-02-04
      • 2012-07-18
      • 2016-10-18
      • 1970-01-01
      • 2019-01-20
      • 2021-09-22
      相关资源
      最近更新 更多