2015-02-10 105 views
1

我在布局中使用一些变量来加载雄辩中的数据。为此,我使用通过构造函数注入控制器的存储库模式。但显然,我不想在我制作的每个控制器中重复这个逻辑。Laravel中用于布局的雄辩数据的全局数据

解决此问题的最佳方法是什么?

我已经尝试将注入库注入BaseController构造函数,但baseController构造函数未自动调用。我需要首先调用parent :: __ construct(),它需要传递参数库参数。我认为这不是正确的做法。

这是我的BaseController。

class BaseController extends Controller { 

    /** 
    * Setup the layout used by the controller. 
    * 
    * @return void 
    */ 
    protected $repo; 

    public function __construct(Repository $repo) { 

     $this->repo = $repo; 
    } 


    protected function setupLayout() 
    { 
     if (! is_null($this->layout)) 
     { 
      $this->layout = View::make($this->layout); 
     } 

     $data = $this->repo->someMethod(); 

     View::share('global_data',$data); 
    } 

} 

不自动调用BaseController构造函数来解决依赖关系。

从布局中使用存储库中的全局数据的最佳方法是什么?

+1

您应该查看[View Composers](http://laravel.com/docs/5.0/views#view-composers) – lukasgeiter 2015-02-10 16:33:26

回答

3

要调用BaseController,您可以将parent::__construct()放在该控制器的构造函数中。如果您有任何需要支持的遗留代码,这可能是最快启动和运行的方式。

前进有View Composers,您可以设置一个服务来侦听在视图中请求的变量,然后根据需要延迟加载它。这种性能的实现通常可以忽略不计,但只有在视图被渲染时才被调用,以便在需要时不能回调框架。

你也可以使用一个route filter(在L4)对于需要param所或middleware(在L5),但是这仅仅是如果你有一个需要得到的不仅仅是一个变量/值,应该做更多的工作,比如controllers在控制器加载之前完成。