91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

laravel多視圖共享數據的示例分析

發布時間:2021-08-22 19:26:32 來源:億速云 閱讀:174 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關laravel多視圖共享數據的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    前言

    在做項目中,網站前臺或者后臺有些數據需要在多個視圖頁面使用,例如用戶基本信息數據,菜單展示數據。首先想到的是在每個控制器里傳入這些需要的數據,但顯然這并不科學。經查視圖文檔了解,可以使用視圖間共享數據和視圖Composer解決。

    在視圖間共享數據

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

    <?php
    
    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
    {
        /**
         * 在容器中注冊綁定.
         *
         * @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 View $view
         * @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多視圖共享數據的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    沅陵县| 南阳市| 报价| 平乡县| 双鸭山市| 宜川县| 加查县| 武陟县| 美姑县| 富宁县| 蕲春县| 柳林县| 息烽县| 宁武县| 应城市| 房山区| 虞城县| 汉中市| 基隆市| 临安市| 青神县| 阿巴嘎旗| 吉首市| 乡城县| 灵台县| 乐业县| 丹凤县| 大英县| 大竹县| 米易县| 璧山县| 汶上县| 司法| 张家界市| 龙岩市| 赤峰市| 乐昌市| 泰宁县| 平凉市| 赣榆县| 隆昌县|