我正在開發這個網路應用程式(Laravel 8),用戶可以在其中選擇他們的顏色主題。基本上,為了簡單起見,假設每個用戶都可以選擇他們的primary_color。
在主頁(不需要身份驗證)上,primary_color 將來自配置(無論用戶是否經過身份驗證)。在經過身份驗證的頁面上,primary_color 來自用戶表(對于經過身份驗證的用戶)。如果用戶未通過身份驗證,我還有一堆頁面使用訪客布局,如果用戶通過身份驗證,則使用應用程式布局。如果用戶未通過身份驗證,這些將使用配置中的 primary_color,如果用戶通過身份驗證,則使用用戶選擇的 primary_color。
所有這些頁面都使用一些需要知道primary_color 的組件(按鈕、導航鏈接等)。
我目前在需要知道primary_color的每個php檔案頂部都有這一行:
$primary_color = (Auth::user() && Route::current()->getName() !== 'home') ? Auth::user()->config->color_theme : "yellow";
(顏色“黃色”在這里是硬編碼的,忽略它。)
我很想避免那么多的代碼復制,但我似乎無法找到一種方法來將這個變數從布局(guest.blade.php 或 app.blade.php)共享到頁面。我似乎也無法包含包含變數的 style.blade.php 視圖。在此包含視圖中宣告的變數在頁面的其余部分中不存在。我設法使用道具將變數傳遞給組件。這不是很好,但它作業正常。但這不是很好,我寧愿使用更清潔的解決方案。
但最重要的是,我如何避免在每個頁面的頂部復制相同的代碼?
謝謝!
uj5u.com熱心網友回復:
您可以使用視圖作曲家。在添加以下代碼的boot方法下AppServiceProvider。
\Illuminate\Support\Facades\View::composer('*',function($view){
$userPrimaryColor = (Auth::user() && ! Route::is('home')) ? Auth::user()->config->color_theme : "yellow";
$view->with('primary_color', $userPrimaryColor);
});
第一個引數*表明它需要共享給所有視圖。如果您需要幾頁中的那些,您可以將頁面串列作為陣列傳遞
uj5u.com熱心網友回復:
如果您想與所有視圖共享資料,您可以使用 laravel 的視圖編輯器。它可以同時將資料附加到所有視圖或多個視圖。來源:https : //laravel.com/docs/5.0/views#view-composers 交替:參見此處 https://www.digitalocean.com/community/tutorials/sharing-data-between-views-using-laravel-view -作曲家
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380523.html
