如何将值从一个控制器传递到laravel中的另一个控制器

时间:2015-04-25 20:17:29

标签: php laravel model-view-controller controller

我正在努力将一个变量从一个控制器方法传递到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);来传递邮件,但它不能像处理视图中的表单一样工作。

这样做的正确方法是什么?

2 个答案:

答案 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')