zoukankan      html  css  js  c++  java
  • laravel下视图间共享数据的两种方法

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

    一、总结

    一句话总结:

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

    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 门面来访问 IlluminateContractsViewFactory 的底层实现

    第一种视图门面share方法,

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

    然后在boot()方法里添加两行进行测试

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

    //也可使用

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

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

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

    那么我们可以使用第二种视图门面share方法,可能网上找的一些没那么好理解,那么今天这里告诉你的方法将会很容易理解和使用

    首先在在app下面的Providers下面新建一个文件ComposerServiceProvider.php,代码如下

    namespace AppProviders;

    use IlluminateSupportFacadesDB;

    use IlluminateSupportFacadesView;

    use IlluminateSupportServiceProvider;

    class ComposerServiceProvider extends ServiceProvider

    {

        /**

    * Register bindings in the container.

    *

        * @return void

    */

        public function boot() {

            // 基于类的view composer

            View::composer(

                '*', 'AppHttpControllersPbulicController'  //这个地方可以调用你已经建好的任何一个控制器,前面的*号代表全局共享,如果指定了视图文件下面的文件夹,可以使用admin.auth.*这种写法,表明你要共享数据的文件范围

            );

    //        View::composer(

    //            'seller.*', 'AppHttpControllersPbulicController'

    //        );

        }

        /**

    * Register the service provider.

    *

        * @return void

    */

        public function register() {

            //

        }

    }

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

    AppProvidersComposerServiceProvider::class,

    这时候,回到ComposerServiceProvider.php这个文件里,找到你调用的那个控制器,我是用的是AppHttpControllersPbulicController

    如果你运行会报错,显示缺少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        

            ]);

        }

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



     
    我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
    博主25岁,前端后端算法大数据人工智能都有兴趣。
    大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
    聊技术,交朋友,修心境,qq404006308,微信fan404006308
    26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
    人工智能群:939687837

    作者相关推荐

  • 相关阅读:
    Andriod ADT v22.6.2版本中在Mainactivity.java中使用fragment_main.xml中TextView控件对象的问题
    SQL学习:查询的用法(1)
    SQL学习:主键,外键,主键表,外键表,数据库的表与表之间的关系;
    HTML基础(2) 格式标签 文本标签
    2013年10月15日数据库学习:约束
    HTML基础(1) 全局架构标签,特殊字符
    2013年10月13日学习:SQL通过命令语句来创建表
    2013年10月13日学习:SQL通过图形化界面创建表
    Tomcat和Nutch的安装
    sqlserver 处理连接池问题
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/14556699.html
Copyright © 2011-2022 走看看