国产三级农村妇女在线,国产精品毛片a∨一区二区三区,国产乱子伦视频大全,国产精品色拉拉,国产欧美日韩一区二区三区,

首頁(yè) > 技術(shù) > IOS開(kāi)發(fā)

laravel多視圖共享數(shù)據(jù)實(shí)例代碼

IOS開(kāi)發(fā) 2023-02-16 22:20:55
目錄
  • 前言
  • 在視圖間共享數(shù)據(jù)
  • 視圖Composer
    • 添加 Composer 到多個(gè)視圖
  • 總結(jié)

    前言

    在做項(xiàng)目中,網(wǎng)站前臺(tái)或者后臺(tái)有些數(shù)據(jù)需要在多個(gè)視圖頁(yè)面使用,例如用戶基本信息數(shù)據(jù),菜單展示數(shù)據(jù)。首先想到的是在每個(gè)控制器里傳入這些需要的數(shù)據(jù),但顯然這并不科學(xué)。經(jīng)查視圖文檔了解,可以使用視圖間共享數(shù)據(jù)和視圖Composer解決。

    在視圖間共享數(shù)據(jù)

    有時(shí)候我們需要在所有視圖之間共享數(shù)據(jù)片段,這時(shí)候可以使用視圖工廠的 share 方法,通常,需要在服務(wù)提供者的 boot 方法中調(diào)用 share 方法,你可以將其添加到 AppServiceProvider 或生成獨(dú)立的服務(wù)提供者來(lái)存放它們:

    <?php
    
    namespace AppProviders;
    
    class AppServiceProvider extends ServiceProvider
    {
        /**
         * 啟動(dòng)所有應(yīng)用服務(wù)
         *
         * @return void
         */
        public function boot()
        {
            view()->share('name', 'dashuai');
        }
    
        /**
         * 注冊(cè)服務(wù)提供者
         *
         * @return void
         */
        public function register()
        {
            //
        }
    }
    

    在各視圖中使用 $name 即可調(diào)用。

    視圖Composer

    視圖Composer 是當(dāng)視圖被渲染時(shí)的回調(diào)或類方法。如果你有一些數(shù)據(jù)要在視圖每次渲染時(shí)都做綁定,可以使用視圖 Composer 將邏輯組織到一個(gè)單獨(dú)的地方。

    首先要在服務(wù)提供者中注冊(cè)視圖 Composer,我們將會(huì)使用輔助函數(shù) view 來(lái)訪問(wèn) IlluminateContractsViewFactory 的底層實(shí)現(xiàn),記住,Laravel 不會(huì)包含默認(rèn)的視圖 Composer 目錄,我們可以按照自己的喜好組織其路徑,例如可以創(chuàng)建一個(gè) AppHttpViewComposers 目錄:

    <?php
    
    namespace AppProviders;
    
    use IlluminateSupportServiceProvider;
    
    class ComposerServiceProvider extends ServiceProvider
    {
        /**
         * 在容器中注冊(cè)綁定.
         *
         * @return void
         * @author http://laravelacademy.org
         */
        public function boot()
        {
            // 使用基于類的composers...
            view()->composer(
                'profile', 'AppHttpViewComposersProfileComposer'
            );
    
            // 使用基于閉包的composers...
            view()->composer('dashboard', function ($view) {
            });
        }
    
        /**
         * 注冊(cè)服務(wù)提供者.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    }
    

    如果創(chuàng)建一個(gè)新的服務(wù)提供者來(lái)包含視圖 Composer 注冊(cè),需要添加該服務(wù)提供者到配置文件 config/app.php 的 providers 數(shù)組中。

    現(xiàn)在我們已經(jīng)注冊(cè)了 Composer,每次 profile 視圖被渲染時(shí)都會(huì)執(zhí)行 ProfileComposer@compose,接下來(lái)我們來(lái)定義該 Composer 類:

    <?php
    
    namespace AppHttpViewComposers;
    
    use IlluminateContractsViewView;
    use IlluminateUsersRepository as UserRepository;
    
    class ProfileComposer
    {
        /**
         * 用戶倉(cāng)庫(kù)實(shí)現(xiàn).
         *
         * @var UserRepository
         */
        protected $users;
    
        /**
         * 創(chuàng)建一個(gè)新的屬性composer.
         *
         * @param UserRepository $users
         * @return void
         */
        public function __construct(UserRepository $users)
        {
            // Dependencies automatically resolved by service container...
            $this->users = $users;
        }
    
        /**
         * 綁定數(shù)據(jù)到視圖.
         *
         * @param View $view
         * @return void
         */
        public function compose(View $view)
        {
            $view->with('count', $this->users->count());
        }
    }
    

    視圖被渲染前,Composer 類的 compose 方法被調(diào)用,同時(shí) IlluminateContractsViewView 被注入該方法,從而可以使用其 with 方法來(lái)綁定數(shù)據(jù)到視圖。

    添加 Composer 到多個(gè)視圖

    你可以傳遞視圖數(shù)組作為 composer 方法的第一個(gè)參數(shù)來(lái)一次性將視圖 Composer 添加到多個(gè)視圖:

    view()->composer(
        ['profile', 'dashboard'],
        'AppHttpViewComposersMyViewComposer'
    );
    

    composer 方法接受 * 通配符,從而允許將一個(gè) Composer 添加到所有視圖:

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

    總結(jié)

    到此這篇關(guān)于laravel多視圖共享數(shù)據(jù)的文章就介紹到這了,更多相關(guān)laravel多視圖共享數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

    TAg

    加載中~

    本網(wǎng)站LOGO受版權(quán)及商標(biāo)保護(hù),版權(quán)登記號(hào):國(guó)作登字-2022-F-10126915,未經(jīng)湖南木星科技官方許可,嚴(yán)禁使用。
    Copyright ? 2012-2022 湖南木星科技有限公司(木星網(wǎng))版權(quán)所有
    轉(zhuǎn)載內(nèi)容版權(quán)歸作者及來(lái)源網(wǎng)站所有,本站原創(chuàng)內(nèi)容轉(zhuǎn)載請(qǐng)注明來(lái)源,商業(yè)媒體及紙媒請(qǐng)先聯(lián)系:aishangyiwan@126.com

    工信部備案號(hào):湘ICP備19012813號(hào)-5