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

如何将值从一个控制器传递到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中看到更多关于它的信息。但是,这意味着您应该查找会话数组中的数据,而不是期望自动将其注入到视图中。

+0

其实你可以用'用()'用重定向。它会将闪值的会话 – lukasgeiter

+0

同意。编辑了答案,使其更加精确。谢谢你的产品:) – petercoles

+0

TLDR;在重定向中使用时,数据存储在会话中 - 通过转储Session :: all()来获取它并获取所需内容 – nbarth

当你这样做:

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