2017-05-07 71 views
1

要構建一個包含大量動態數據的邊欄,我學習了Laravel中的視圖作曲家。問題在於View Composer在視圖加載時觸發,並將控制器中的任何數據覆蓋爲具有相同名稱的變量。根據Laravel 5.4的文檔,我通過視圖創作者實現了我想要的功能:如何在Laravel中使控制器數據覆蓋視圖控制器?

查看創建者與查看作曲者非常相似;然而,在視圖實例化之後立即執行 ,而不是等待 ,直到視圖即將呈現。要註冊視圖創建,使用 創作者方法:

據我所知,這意味着如果我加載與控制器和創作者的同名變量,控制器應覆蓋它。然而,這並沒有發生在我的代碼中。視圖作曲家:

public function boot() 
{ 
    view()->creator('*', function ($view) { 

      $userCompanies = auth()->user()->company()->get(); 
      $currentCompany = auth()->user()->getCurrentCompany(); 

     $view->with(compact('userCompanies', 'currentCompany')); 
    }); 
} 

這裏是控制器中的一個,例如:

public function name() 
{ 
    $currentCompany = (object) ['name' => 'creating', 'id' => '0', 'account_balance' => 'N/A']; 

    return view('companies.name', compact('currentCompany')); 
} 

所討論的$ currentCompany可變的,例如,總是保留來自創建者的值,而不是被覆蓋來自控制器的人。任何想法這裏有什麼錯誤?

回答

0

經過一番研究,我意識到我最初的假設,即來自視圖創建者的數據可能會被來自控制器的數據覆蓋錯誤。創建者仍然會在控制器之後加載。但我找到了一個簡單的解決方案

對於那些想要使用View作曲家/創作者獲取可以被覆蓋的默認數據的人,可以在作曲者/創作者的boot()方法末尾,在控制器和composer/creator數據之間進行數組合並,就像所以:

$with = array_merge(compact('userCompanies', 'currentCompany', 'currentUser'), $view->getData()); 
      $view->with($with);