您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何在Laravel5.5中創建視圖,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
創建視圖
視圖包含應用的 HTML 代碼,并將應用的控制器邏輯和表現邏輯進行分離。視圖文件存放在 resources/views 目錄中。下面是一個簡單的視圖示例:
<!-- resources/views/greeting.blade.php 視圖文件 --> <html> <body> <h2>Hello, {{ $name }}</h2> </body> </html>
可以通過輔助函數 view ,返回這個視圖響應:
Route::get('/', function () { return view('greeting', ['name' => 'jack']); });
view 方法的第一個參數是 resources/views 目錄下相應的視圖文件的名稱,第二個參數是一個數組,表示傳遞給視圖文件的數據。
在這個例子中,我們傳遞了一個 name 變量,在視圖中通過使用 Blade 語法將其顯示出來。
當然,視圖還可以存放在 resources/views 的子目錄中,用“.”號來引用子目錄中的視圖。
例如,如果視圖存放路徑是 resources/views/admin/profile.blade.php,那么我們可以這樣引用它:
return view('admin.profile', $data);
判斷視圖是否存在
如果需要判斷視圖是否存在,可調用 View 門面上的 exists 方法,如果視圖存在則返回 true:
use Illuminate\Support\Facades\View; if (View::exists('emails.customer')) { // }
創建第一個有效視圖
調用 View 門面上的 first 方法,可以用于創建給定視圖數組中的第一個存在的視圖:
use Illuminate\Support\Facades\View; return View::first(['custom.admin', 'admin'], $data);
這個功能在應用或擴展包允許視圖被自定義或覆蓋時很有用。
傳遞數據到視圖
可以簡單通過數組方式將數據傳遞到視圖:
return view('greeting', ['name' => 'jack']);
除此之外,還可以通過 with 方法傳遞獨立的數據片段到視圖:
$view = view('greeting')->with('name', 'jack');
在視圖間共享數據
有時候,我們需要在所有視圖之間共享數據片段,這時可以使用視圖門面的 share 方法,通常,需要在某個服務提供者的 boot 方法中調用 share 方法,你可以將其添加到 AppServiceProvider 或生成獨立的服務提供者來存放這段代碼邏輯:
<?php namespace App\Providers; use View; class AppServiceProvider extends ServiceProvider { /** * 啟動所有應用服務 * * @return void */ public function boot() { View::share('key', 'value'); } /** * 注冊服務提供者 * * @return void */ public function register() { // } }
視圖 Composer
視圖 Composer 是當視圖被渲染時的回調函數或類方法。
如果你有一些數據需要在視圖每次渲染時都做綁定,可以使用視圖 Composer 將邏輯組織到一個單獨的地方。
在本例中,首先要在某個服務提供者中注冊視圖 Composer,我們將會使用 View 門面來訪問 Illuminate\Contracts\View\Factory 的底層實現,記住,Laravel 不會包含默認的視圖 Composer 目錄,我們可以按照自己的喜好組織其路徑,例如可以創建一個 app/Http/ViewComposers 目錄:
<?php namespace App\Providers; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class ComposerServiceProvider extends ServiceProvider { /** * 在容器中注冊綁定. * * @return void */ public function boot() { // 使用基于類方法的 composers... View::composer( 'profile', 'App\Http\ViewComposers\ProfileComposer' ); // 使用基于回調函數的 composers... View::composer('dashboard', function ($view) {}); } /** * 注冊服務提供者. * * @return void */ public function register() { // } }
注:如果創建一個新的服務提供者來包含視圖 Composer 注冊,需要添加該服務提供者到配置文件 config/app.php 的 providers 數組中。
現在我們已經注冊了視圖 Composer,每次 profile 視圖被渲染時都會執行 ProfileComposer@compose 方法,接下來我們來定義該 Composer 類:
<?php namespace App\Http\ViewComposers; use Illuminate\View\View; use Illuminate\Repositories\UserRepository; class ProfileComposer { /** * 用戶倉庫實現. * * @var UserRepository */ protected $users; /** * 創建一個新的屬性composer. * * @param UserRepository $users * @return void */ public function __construct(UserRepository $users) { // 依賴注入通過服務容器自動解析... $this->users = $users; } /** * 綁定數據到視圖. * * @param View $view * @return void */ public function compose(View $view) { $view->with('count', $this->users->count()); } }
視圖被渲染前,Composer 類的 compose 方法被調用,同時 Illuminate\View\View 實例被注入該方法,從而可以使用其 with 方法來綁定數據到視圖。
注:所有視圖 Composer 都通過服務容器被解析,所以你可以在 Composer 類的構造函數中聲明任何你需要的依賴。
添加 Composer 到多個視圖
你可以傳遞視圖數組作為 composer 方法的第一個參數來一次性將視圖 Composer 添加到多個視圖:
View::composer( ['profile', 'dashboard'], 'App\Http\ViewComposers\MyViewComposer' ); composer 方法還支持 * 通配符,允許將一個 Composer 添加到所有視圖: View::composer('*', function ($view) { // });
視圖創建器
視圖創建器和視圖 Composer 非常類似,不同之處在于前者在視圖實例化之后立即失效而不是等到視圖即將渲染。
使用 View 門面的 creator 方法即可注冊一個視圖創建器:
View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');
關于如何在Laravel5.5中創建視圖就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。