zoukankan      html  css  js  c++  java
  • 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 方法来绑定数据到视图。

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

  • 相关阅读:
    常用录屏工具
    python常用工具库介绍
    修改anaconda3 jupyter notebook 默认路径
    【转载】面试那些事【三】
    【转载】面试那些事【二】
    【转载】面试那些事【一】
    Myeclipse 激活代码 8.6以前的版本
    ddd
    Java 算法
    Java 水仙花数
  • 原文地址:https://www.cnblogs.com/it-3327/p/11801679.html
Copyright © 2011-2022 走看看