1. 程式人生 > 程式設計 >laravel多檢視共享資料例項程式碼

laravel多檢視共享資料例項程式碼

目錄
  • 前言
  • 在檢視間共享資料
  • 檢視Composer
    • 新增 Composer 到多個檢視
  • 總結

    前言

    在做專案中,前臺或者後臺有些資料需要在多個檢視頁面使用,例如使用者基本資訊資料,選單展示資料。首先想到的是在每個控制器裡傳入這些需要的資料,但顯然這並不科學。經查檢視文件瞭解,可以使用檢視間共享資料和檢視Composer解決。

    在檢視間共享資料

    有時候我們需要在所有檢視之間共享資料片段,這時候可以使用檢視工廠的 share 方法,通常,需要在服務提供者的 boot 方法中呼叫 share 方法,你可以將其新增到 AppServiceProvider 或生成獨立的服務提供者來存放它們:

    <?
    
    namespace App\Providers;
    
    class AppServiceProvider extends ServiceProvider
    {
        /**
         * 啟動所有應用服務
         *
         * @return void
         */
        public function boot
    () { view()->share('name','dashuai'); } /** * 註冊服務提供者 * * @return void */ public function register() { // } }

    在各檢視中使用 $name 即可呼叫。

    檢視Composer

    檢視Composer 是當檢視被渲染時的回撥或類方法。如果你有一些資料要在檢視每次渲染時都做繫結,可以使用檢視 Composer 將邏輯組織到一個單獨的地方。

    首先要在服務提供者中註冊檢視 Composer,我們將會使用輔助函式 view 來訪問 Illuminate\Contracts\View\Factory 的底層實現,記住,Laravel 不會包含預設的檢視 Composer 目錄,我們可以按照自己的喜好組織其路徑,例如可以建立一個 App\Http\ViewComposers 目錄:

    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    
    class ComposerServiceProvider extends ServiceProvider
    {
        /**
         * 在容器中注nczizv冊繫結.
         *
         * @return void
         * @author http://laravelacademy.org
         */
        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\Contracts\View\View;
    use Illuminate\Users\Repository as UserRepository;
    
    class ProfileComposer
    {
        /**
         * 使用者倉庫實現.
         *
         * @var UserRepository
         */
        protected $users;
    
        /**
         * 建立一個新的屬性composer.
         *
         * @param UserRepository $users
         * @return void
         */
        public function __construct(UserRepository $users)
        {
            // Dependencies automatically resolved by service container...
            $this->users = $users;
        }
    
        /**
         * 繫結資料到檢視.
         *
         * @param Vinczizvew $view
       www.cppcns.com  * @return void
         */
        public function compose(View $view)
        {
            $view->with('count',$this->users->count());
        }
    }
    

    檢視被渲染前,Composer 類的 compose 方法被呼叫,同時 Illuminate\Contracts\View\View 被注入該方法,從而可以使用其 with 方法來繫結資料到檢視。

    新增 Composer 到多個檢視

    你可以傳遞檢視陣列作為 composer 方法的第一個引數來一次性將檢視 Composer 新增到多個檢視:

    view()->composer(
        ['profile','dashboard'],'App\Http\ViewComposers\MyViewComposer'
    );
    

    composer 方法接受 * 萬用字元,從而允許將一個 Composer 新增到所有檢視:

    view()->composer('*',function ($view) {
        //
    });
    

    總結

    到此這篇關於laravel多檢視共享資料的文章就介紹到這了,更多相關laravel多檢視共享資料內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!