• laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法


    laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容。

    首先,需要注意的一点是:都是使用 View 门面来访问 IlluminateContractsViewFactory 的底层实现

    视图门面share()方法

    有时需要在所有视图之间共享数据片段,这时候可以使用视图门面的 share 方法。

    1,一般情况下,我会在apphttpControllersxx下创建一个基础控制器 BaseController.php,

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    <?php

    namespace AppHttpControllersExtMan;

     

    use IlluminateRoutingController;

     

    class BaseController extends Controller

    {

        public function __construct(Auth $auth)

        {

            $this->initViewShare();    //视图共享数据

        }

        /**

         *  视图共享数据方法

         */

        public function initViewShare()

        {

            view()->share('action_name',get_action_name()); //当前URL的方法器名

         }

    }

     

     

    //视图使用

    //共享视图一般都是在layout中

    {{ $action_name }}

    get_action_name() 是自定义的一个函数。

    链接:https://pan.baidu.com/s/1v5gm7n0L7TGyejCmQrMh2g 提取码:x2p5

    免费分享,但是X度限制严重,如若链接失效点击链接或搜索加群 群号518475424

    tips:
    创建 appHelpersExtmanFun.php , composer.json的autoload引入

    1

    2

    3

    "files":[

        "app/Helpers/ExtmanFun.php"

    ]

    运行 composer dump-autoload 会自动加载

    2,在 AppServiceProvider 服务提供器(或者新建提供器) 的boot方法中调用share()

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    <?php

    namespace AppProviders;

    use View;

    class AppServiceProvider extends ServiceProvider

    {

        /**

         * 启动所有应用服务

         *

         * @return void

         */

        public function boot()

        {

            View::share('key', 'value');

            //也可使用

            view()->share('name','共享数据片段');

        }

    }

    视图门面composer()方法

    视图合成器是当视图被渲染时的回调函数或类方法 ,如果你每次渲染视图时都要绑定视图的数据,比如用户登陆信息。可以使用composer() 将逻辑组织到一个单独的地方。
    本例中,我们将在AppServiceProvider服务提供器中注册视图合成器,
    提供器代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    <?php

    namespace AppProviders;

     

    #use IlluminateSupportFacadesView;

    use IlluminateSupportServiceProvider;

    class AppServiceProvider extends ServiceProvider

    {

        public function boot()

        {

            // 使用基于类方法

            // 第一个参数可以指定共享给那个视图,多个视图用数组,共享到全部视图可以用 *

            // 或者某个目录下所有视图

            view()->composer(

                //'*', 'AppHttpViewComposersAuthComposer'

                //['extman.home, welcome'], 'AppHttpViewComposersAuthComposer'

                ['extman.*'], 'AppHttpViewComposersAuthComposer'

            );

     

            //使用基于回调函数

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

                $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));

            });

        }

    other code

    }

    如果创建一个新的服务提供器来包含视图composer 注册,需要添加该服务提供者到配置文件 config/app.php 的 providers 数组中

    到此已经注册了视图合成器,每次渲染 extman目录下所有视图时都会执行 AuthComposer@compose 方法。
    定义视图合成器类 AppHttpViewComposersAuthComposer.php

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    <?php

    namespace AppHttpViewComposers;

     

    use IlluminateViewView;

    use IlluminateRepositoriesUserRepository;

     

    class AuthComposer

    {

        protected $users;

     

        public function __construct(UserRepository $users)

        {

            // 依赖注入通过服务容器自动解析...

            $this->users = $users;

        }

     

        //绑定数据到视图

        public function compose(View $view)

        {

            $user_info = Auth::user();

            $view->with('motto', $user_info);

            $view->with('count', $this->users->count());

        }

    }

    视图被渲染前,AuthComposer类的 compose 方法被调用,同时 IlluminateViewView 实例被注入该方法,从而可以使用其 with 方法来绑定数据到视图。

    所有的视图合成器都会通过 服务容器 进行解析,所以你可以在视图合成器的构造函数中类型提示需要注入的依赖项。

  • 相关阅读:
    Oracle基础知识整理
    linux下yum安装redis以及使用
    mybatis 学习四 源码分析 mybatis如何执行的一条sql
    mybatis 学习三 mapper xml 配置信息
    mybatis 学习二 conf xml 配置信息
    mybatis 学习一 总体概述
    oracle sql 语句 示例
    jdbc 新认识
    eclipse tomcat 无法加载导入的web项目,There are no resources that can be added or removed from the server. .
    一些常用算法(持续更新)
  • 原文地址:https://www.cnblogs.com/it-3327/p/11801679.html
Copyright © 2020-2023  润新知