PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Laravel教程 > 正文

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

    作者:admin来源:网络浏览:时间:2021-04-08 10:49:52我要评论
    导读:1).首先我们这里讲到的laravel种共享数据的方法是① 视图门面share()方法实现②视图门面composer() 方法实现需要注意的是 底层原理:都...
    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.

    *

        * @return void

    */

        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       

            ]);

        }



    然后就可以在你的页面把变量展示出来了
    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-153-6551-1.html
    上一篇:laravel的优点