2014-02-06 16 views
2

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

例如:我有一个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同样的事情?

非常感谢!

回答

4

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

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

这是过程的生命周期:

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

所以。假设你已经提交了一个表单,并成功地将数据保存到数据库中。当你保存它,你做了这样的事情:

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

在这种情况下,用户可以在屏幕上看到的success消息,但如果用户,按从键盘的F5关键refresh页面(可能意外),表单将再次提交给同一个动作,整个过程将再次重复。

因此,如果您在表单提交后有重定向,那么refreshing页面不会再对该表单提出任何请求。

谷歌在form resubmit on refresh.上的搜索结果,检查链接,可能是第一个/两个,你会更好地了解问题和表单提交后重定向的好处。

1

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

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

嗨Moorthy GK,谢谢,但我不想重定向我要加载的POST函数内部的看法。如果你重定向,我认为你正在做的一个。更多额外的步骤 –

1

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

你可以返回其他的东西,例如。一种观点:

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

谢谢汤姆,而不是制作视图,我可以重用我已有的功能。像$ this-> getIndex(); ? –

+0

在Laravel 3中它的工作原理,在L4中我认为它也应该起作用,但是IMO是一个糟糕的方法。如果你这样做,你必须经常检查所有需要的变量。使用'Return :: redirect()'保证没有问题,你可以保持你的代码干爽。此外 - 重定向仅在控制器之间的laravel内部重定向路由,因此在调用它之后,总共只有一个html响应生成。 – Tom

+0

忘了关于一件事 - 你也可以重定向到控制器(不仅仅是一个路线) – Tom

0

在Laravel,重定向做一个POST后,你可以返回重定向有一个名为路线:

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

或者,如果你是有需要的路径方法(控制器内如index方法,你可以这样做,以及:

return self::index();