天天看點

laravel下視圖間共享資料的兩種方法

laravel下視圖間共享資料的兩種方法

1).首先我們這裡講到的laravel種共享資料的方法是

① 視圖門面share()方法實作

②視圖門面composer() 方法實作

需要注意的是 底層原理:都是使用 view 門面來通路 illuminate\contracts\view\factory 的底層實作

第一種視圖門面share方法,

找到自己的appserviceprovider ,在app下面的providers下面

laravel下視圖間共享資料的兩種方法

然後在boot()方法裡添加兩行進行測試

view::share('name1', 'first name');

//也可使用

view()->share('name2','second  name');

前端頁面随便任何地方都可以加上{{$name1}}和{{$name2}}

這樣前端所有頁面都可以顯示出共享的資料,但是缺點是,在appserviceprovider 這個函數中無法擷取緩存,隻能指向性的從資料庫中查詢一些定向資料或者自定義一些變量值,使用起來局限性比較大

那麼我們可以使用第二種視圖門面share方法,可能網上找的一些沒那麼好了解,那麼今天這裡告訴你的方法将會很容易了解和使用

首先在在app下面的providers下面建立一個檔案composerserviceprovider.php,代碼如下

namespace app\providers;

use illuminate\support\facades\db;

use illuminate\support\facades\view;

use illuminate\support\serviceprovider;

class composerserviceprovider extends serviceprovider

{

    /**

* register bindings in the container.

*

    * @return void

*/

    public function boot() {

        // 基于類的view composer

        view::composer(

            '*', 'app\http\controllers\pbuliccontroller'  //這個地方可以調用你已經建好的任何一個控制器,前面的*号代表全局共享,如果指定了視圖檔案下面的檔案夾,可以使用admin.auth.*這種寫法,表明你要共享資料的檔案範圍

        );

//        view::composer(

//            'seller.*', 'app\http\controllers\pbuliccontroller'

//        );

    }

* register the service provider.

    public function register() {

        //

}

在代碼裡寫入自己的控制器,然後需要在app/config/app.php裡面添加一行代碼

app\providers\composerserviceprovider::class,

laravel下視圖間共享資料的兩種方法

這時候,回到composerserviceprovider.php這個檔案裡,找到你調用的那個控制器,我是用的是app\http\controllers\pbuliccontroller

如果你運作會報錯,顯示缺少compose這個函數

這時候你就需要添加compose()函數到你的控制器裡函數代碼如下

public function compose(view $view)

    {

//我的代碼,可以寫自己的邏輯,這裡能擷取session等各種資料

        $ru_id =  session('ru_id');

        $need_deliver_num = db::select("select  count(*) as num  from  dsc_order_info  where  pay_status = 2 and shipping_status = 0")[0]->num;

        $cancel_order_num = db::select("select  count(*)  as num  from  dsc_order_info  where  order_sn  in  (select order_sn  from  dsc_cancel_pay_order_log)  and order_status <> 4")[0]->num;

        $user_need_check_num = db::select("select  count(*)  as  num  from  dsc_users a  left  join  dsc_users_operate_area  b  on a.user_id = b.user_id

where  b.review_status = 0 or b.review_status is  null")[0]->num;

        $order_return_num = db::select("select count(*) as  num  from  dsc_order_return  where  is_check = 0")[0]->num;

        $seller_user_need_check_num = db::select("select  count(*)  as  num  from  dsc_users a  left  join  dsc_users_operate_area  b  on a.user_id = b.user_id

where  a.ru_id_k = '$ru_id'  and    (b.review_status = 0 or b.review_status is  null)")[0]->num;

//下面是把變量分享出去

        $view->with([

            'need_deliver_num' => $need_deliver_num,                            

            'cancel_order_num' => $cancel_order_num,                            

            'user_need_check_num' => $user_need_check_num,                       

            'order_return_num' => $order_return_num,                             

            'seller_user_need_check_num' => $seller_user_need_check_num        

        ]);

然後就可以在你的頁面把變量展示出來了

一些博文中有一些參考内容因時間久遠找不到來源了沒有注明,如果侵權請聯系我删除。