微信扫一扫打赏支持

laravel下视图间共享数据的两种方法

laravel下视图间共享数据的两种方法

一、总结

一句话总结:

①视图门面share()方法实现:这样有很多限制,比如获取不到Auth里面的数据
②视图门面composer()方法实现:这样可以获取到Auth里面的数据
底层原理:都是使用 View 门面来访问 Illuminate\Contracts\View\Factory 的底层实现

 

1、laravel下视图间共享数据的share()方法使用流程?

【位置】:找到自己的AppServiceProvider ,【在app下面的Providers下面】
【代码】:在boot()方法里添加代码进行测试:【View::share('name1', 'first name')】;

 

2、laravel下视图间共享数据的 【share()方法】 使用 【局限】?

这样前端所有页面都可以显示出共享的数据,但是缺点是,在AppServiceProvider 这个函数中【无法获取缓存】,只能【指向性的从数据库中查询一些定向数据】或者【自定义一些变量值】,使用起来局限性比较大

 

 

 

二、laravel下视图间共享数据的两种方法

转自:https://www.jianshu.com/p/49d9f77a9380

 

1).首先我们这里讲到的laravel种共享数据的方法是

① 视图门面share()方法实现

②视图门面composer() 方法实现

需要注意的是 底层原理:都是使用 View 门面来访问 Illuminate\Contracts\View\Factory 的底层实现

第一种视图门面share方法,

找到自己的AppServiceProvider ,在app下面的Providers下面

 

然后在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.

*

    * @return void

*/

    public function register() {

        //

    }

}

 

在代码里写入自己的控制器,然后需要在app/config/app.php里面添加一行代码

App\Providers\ComposerServiceProvider::class,

这时候,回到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        

        ]);

    }

 

然后就可以在你的页面把变量展示出来了



 

 

 
posted @ 2021-04-01 08:23  范仁义  阅读(110)  评论(0编辑  收藏  举报