我正在努力将一个变量从一个控制器方法传递到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);
来传递邮件,但它不能像处理视图中的表单一样工作。
这样做的正确方法是什么?
答案 0 :(得分:4)
在视图上使用with()会将数据添加到同一http请求中传递给视图的数据。但是,您正在进行重定向,因此创建新请求,因此()以不同的方式运行。
要在http请求之间传递数据,您需要将其附加到URL(可能不是一个好主意)或将其存储在会话中(更好),Laravel的会话处理支持非常整齐,通过允许您闪存数据,将其放置在会话中仅用于下一个http请求(重定向上带有()为您执行此操作),然后将其清除掉。)
您可以在Laravel documentation中查看更多相关信息。但是,这意味着您应该在会话数组中查找数据,而不是期望它自动注入到视图中。
答案 1 :(得分:1)
执行此操作时:
return Redirect::to('admin/products/list/'.$current_section_id)
->with('message', 'New Product Created');
“with”方法与:
相同\Session::flash('message', 'New Product Created');
所以在getList()上,您可以使用:
检索它$message = session('message');
但是这没有必要,因为会话还没有结束,它将可用于任何控制器方法呈现视图并关闭会话。你可以这么做:
public function getList($id){
$message = Input::get('message');
return View::make('products.list')
->with('current_section_id', $id);
}
您的视图可以使用您想要的任何方法访问会话,例如:
session('message')