【问题标题】:Laravel : Load a view after postingLaravel:发布后加载视图
【发布时间】:2014-03-03 05:56:28
【问题描述】:

在 Codeigniter 中,我曾经在发布数据后调用视图函数。如下所示;

例如:我有一个显示产品列表的 show_products() 函数。当用户添加新产品时,我将数据发布到 add_product() 函数中。如果该过程成功,我将不重定向到产品页面,而是像这样在 add_product() 中加载显示函数:

//Inside the add_product() function
if(success){

   $this->show_products();

}

我认为,没有必要再次重新加载页面。由于我们已经在 post 函数中,我们可以在数据库插入后立即设置视图。

但是在 laravel 中,我看到人们在发布数据后重定向。

例如:

//Inside the postProduct() function
if(success){

   return Redirect::to('products');

}

我试过了;

//Inside the postProduct() function
if(success){

   $this->getIndex();// this is my product display function

}

但是没有用。

在 post 函数中加载视图而不每次都重定向是否有好处?

如果是这样,我怎样才能用 laravel 实现同样的目标?

非常感谢!

【问题讨论】:

    标签: php post view laravel


    【解决方案1】:

    在 Laravel 中,要在执行 POST 后重定向,您可以返回带有命名路由的重定向:

    return redirect()->route('my-route-name');
    

    或者,如果您在具有所需路由方法的控制器内(例如 index 方法,您也可以这样做:

    return self::index();
    

    【讨论】:

      【解决方案2】:

      这不是关于Laravel,而是关于一种好的或正确的做事方式。换句话说,在成功提交表单后重定向到另一个路由/页面是一种很好的编程习惯。

      即使在CodeIgniter 或普通Php 中,我也喜欢这种方法并鼓励其他开发人员这样做。那么,问题是为什么这种重定向比直接从同一个请求中调用另一个方法来显示另一个视图/页面更好?

      这是进程的生命周期:

      1. 您将表单发布到路线/操作页面。
      2. 您验证提交的数据,并在成功验证后将提交的数据插入到您的数据库中,否则您会重定向回该表单并出现错误和旧用户输入。

      所以。假设您已提交表单并成功将数据保存到数据库中。保存后你做了这样的事情:

      return View::make('...')->with('success', 'Data saved!');
      

      在这种情况下,您的用户可以在屏幕上看到 success 消息,但如果用户从键盘按下 f5 键到 refresh 页面(可能是不小心)怎么办? ,表单将再次提交到相同的操作,整个过程将再次重复。

      因此,如果您在提交表单后进行了重定向,那么refreshing 页面将不会再次向该表单发出任何请求。

      form resubmit on refresh. 上的 Google 搜索结果,检查链接,可能是第一个/第二个,您会更好地了解问题以及表单提交后重定向的好处。

      【讨论】:

        【解决方案3】:

        您不必返回Redirect。人们经常在 larvel 中使用它的原因是因为它很舒服。

        您可以返回其他内容,例如。一个视图:

        return View::make('home.index')->with('var',$var);
        

        【讨论】:

        • 谢谢汤姆!我可以重复使用已有的功能,而不是制作视图。类似 $this->getIndex(); ?
        • 在 Laravel 3 中它可以工作,在 L4 中我认为它也应该可以工作,但 IMO 这是一个糟糕的方法。如果您以这种方式执行此操作,则必须始终检查以进一步传递所有需要的变量。使用Return::redirect() 保证没有问题,并且您可以保持代码干燥。另外 - redirect 只在控制器之间的 laravel 内部重定向路由,所以在调用它之后,总而言之,只生成一个 html 响应。
        • 忘了一件事——你也可以重定向到控制器(不仅仅是路由)
        • 我也遇到了发布请求的问题。你能帮忙吗? link
        【解决方案4】:

        在 Codeigniter 中重定向页面,我们有 redirect() 函数。

        if(success){
            redirect('products');
        }
        

        【讨论】:

        • 嗨 Moorthy GK,谢谢,但我不想重定向。我想在 POST 函数中加载视图。如果你重定向,我认为你又做了一个额外的步骤。
        猜你喜欢
        • 2011-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-26
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        • 2015-12-17
        相关资源
        最近更新 更多