在Codeigniter中,我过去在发布数据后调用了view函数。如下所示;
Ex:我有一个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做同样的事情?
非常感谢!
答案 0 :(得分:5)
这不是关于Laravel
,而是关于一种好的或正确的做事方式。换句话说,在成功提交表单后,重定向到另一个路径/页面是一种很好的编程习惯。
即使在CodeIgniter
或普通Php
我也喜欢这种做法,并鼓励其他开发者这样做。那么,问题是为什么这个重定向比直接从同一个请求中调用另一个方法来显示另一个视图/页面更好?
这是该过程的生命周期:
因此。假设您已提交表单并已成功将数据保存到数据库中。保存后,你做了类似的事情:
return View::make('...')->with('success', 'Data saved!');
在这种情况下,您的用户可以在屏幕上看到success
消息,但如果用户将键盘上的 f5 键按到refresh
页面,该怎么办?可能,意外地),表格将再次提交给同一个动作,整个过程将再次重复。
因此,如果您在表单提交后进行了重定向,那么refreshing
该页面将不再向该表单发出任何请求。
form resubmit on refresh.上的Google搜索结果,检查链接,可能是第一个/第二个,您可以更好地了解问题以及表单提交后重定向的好处。
答案 1 :(得分:1)
我们有redirect()
函数。
if(success){
redirect('products');
}
答案 2 :(得分:1)
您不必返回Redirect
。人们经常使用它的原因是因为它很舒服。
您可以返回其他内容,例如。观点:
return View::make('home.index')->with('var',$var);
答案 3 :(得分:0)
在Laravel中,要在执行POST后重定向,您可以返回带有命名路由的重定向:
return redirect()->route('my-route-name');
或者如果你在控制器中有你想要的路由方法(例如index
方法,你也可以这样做:
return self::index();