Laravel:我如何将变量从控制器传递给另一个?

时间:2014-11-18 13:04:06

标签: php variables laravel parameters controller

我在编程方面很新(仍然是学生)并且在Laravel中非常新。我必须为消防员制作一个外联网,因此,大多数情况下,我需要从我的数据库获取的记录是他们的个人数据,他们的议程以及类似的东西。也许我正在以错误的方式看着这个,但我想以这种方式建立我的项目:

BaseController __constructor包含获取每个视图中所需数据的逻辑。事实上,我使用'View :: share'代码

返回所有变量
View::share('milite', $milite);
View::share('agenda', $agenda);
View::share('log_accessi', $log_accessi);
View::share('data_import', $data_import);

虽然我想使用另一个类,AgendaController(它会扩展BaseController)从firefighters'agenda获取数据。为此,我需要将变量$ milite从BaseController传递给AgendaController。

我真的不知道该怎么做!有人可以解释一下吗? 我希望你理解我的问题,因为英语不是我的母语。非常感谢你!

萨拉

2 个答案:

答案 0 :(得分:0)

有许多方法可以跨控制器共享变量:

  1. 如果你像在视图中一样分享变量,可以在其他控制器中使用变量$ milite。应该没问题。
  2. 您可以在基类中定义一个静态变量,以便可以在扩展基类的所有类中使用该变量。
  3. 在AgendaController的构造函数中,只需将firefighters'agenda作为构造控制器的参数传递。
  4. 简单地通过App :: make('firefighters'agenda') - > with(你的参数)在AgendaController中调用firefighters'agenda的方法。通过这种方式,您可以传递值并调用其他控制器的方法。

答案 1 :(得分:0)

这不是正确的方法。首先,在BaseController的构造函数中使用各种逻辑将最终减慢应用程序的速度,因为所有请求都必须通过这些逻辑语句,无论它们是否需要它们。事实上,控制器根本不应该相互交互,因为他们应该做的是处理传入的HTTP请求并提供响应。

为了给你答案,因为你无论如何都在扩展BaseController,至少将你的逻辑移出BaseController构造函数并将其移动到BaseController中的公共方法

class BaseController extends Controller 
{


    public function fillView()
    {
         $data = array('someData' =>  'data');
         return $data;
    }

然后在AgendaController中,您可以通过继承来访问公共方法:

   <?php


   class AgendaController extends BaseController
   {

         public function showAgenda(){
              $dataFromBaseController = $this->fillView();
              ...
         }

   }

这不是你应该怎么做的。您通常要做的是将逻辑相关的东西移动到另一个类中的方法(比如服务,或者如果您正在访问数据库,则可能是存储库),然后使用laravel的依赖注入容器来访问控制器中的那些方法