2015-02-10 52 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在控制器加載之前完成。