如何将值从一个控制器传递到laravel中的另一个控制器
问题描述:
我正在努力将一个控制器方法中的变量传递给laravel中的另一个控制器方法。如何将值从一个控制器传递到laravel中的另一个控制器
当用户创建产品时,我想让他现在结果。
问题是执行Create方法后,消息应该在传递到视图之前传递给另一个控制器。
我想从postCreate方法传递成功或失败消息到getList方法。
创建方法:
public function postCreate() {
if(validation passes){
//create product
return Redirect::to('admin/products/list/'.$current_section_id)
->with('message', 'New Product Created');
}
else{
return Redirect::to('admin/products/new)
->with('message', 'Something went wrong');
}
}
的GetList方法返回一个用户的页面,他前(current_section_id)和产品列表,
public function getList($id){
$message = Input::get('message');
return View::make('products.list')
->with('current_section_id', $id)
->with('message', $message);
}
我曾尝试使用->with('message', $message);
传递一个消息,但它不起作用,就像它在视图中使用表单一样。
什么是正确的做法?
答
在视图中使用with()会将数据添加到在同一http请求中传递给视图的数据。然而,你正在做一个重定向,因此创建一个新的请求,所以with()的运行方式不同。
要在http请求之间传递数据,您需要将它附加到url(可能不是一个好主意),或者将它存储在会话中(好得多),Laravel的会话处理支持非常整齐,允许您以刷新数据,即将其放置在会话中,仅用于下一个http请求(使用重定向的()()来处理),然后将其清理干净。
你可以在Laravel documentation中看到更多关于它的信息。但是,这意味着您应该查找会话数组中的数据,而不是期望自动将其注入到视图中。
答
当你这样做:
return Redirect::to('admin/products/list/'.$current_section_id)
->with('message', 'New Product Created');
“同向” 的方法是一样的:
$message = session('message');
:
\Session::flash('message', 'New Product Created');
所以上的GetList(),你可以找回
但是这不是必须的,因为会话还没有结束,它可以用于任何控制器方法呈现视图和clo接受会话。你可以只是做:
public function getList($id){
$message = Input::get('message');
return View::make('products.list')
->with('current_section_id', $id);
}
而且你的观点将有机会获得会话,使用任何你想要的方法,如:
session('message')
其实你可以用'用()'用重定向。它会将闪值的会话 – lukasgeiter
同意。编辑了答案,使其更加精确。谢谢你的产品:) – petercoles
TLDR;在重定向中使用时,数据存储在会话中 - 通过转储Session :: all()来获取它并获取所需内容 – nbarth