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

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

视图门面share()方法

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

1,一般情况下,我会在app\http\Controllers\xx下创建一个基础控制器 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 App\Http\Controllers\ExtMan;

use Illuminate\Routing\Controller;

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:
创建 app\Helpers\ExtmanFun.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 App\Providers;

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 App\Providers;

#use Illuminate\Support\Facades\View;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider

{

    public function boot()

    {

        // 使用基于类方法

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

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

        view()->composer(

            //'*', 'App\Http\ViewComposers\AuthComposer'

            //['extman.home, welcome'], 'App\Http\ViewComposers\AuthComposer'

            ['extman.*'], 'App\Http\ViewComposers\AuthComposer'

        );

        //使用基于回调函数

        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 方法。
定义视图合成器类 App\Http\ViewComposers\AuthComposer.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 App\Http\ViewComposers;

use Illuminate\View\View;

use Illuminate\Repositories\UserRepository;

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 方法被调用,同时 Illuminate\View\View 实例被注入该方法,从而可以使用其 with 方法来绑定数据到视图。

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

laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法的更多相关文章

  1. SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法

    软件152 尹以操 首先谢谢大佬的简书文章:http://www.jianshu.com/p/45ad65690e33# 这篇文章中讲的是spring中使用spring data jpa,使用了xml ...

  2. angularjs中向html页面添加内容节点元素代码段的两种方法

    第一种方式:原生JS向html页面添加内容节点元素代码段: <!DOCTYPE html> <html> <head> <meta charset=" ...

  3. 【get√】golang中实现从腾讯云CVM查询网卡流量的两种方法

    公众号文章链接 主要参考了以下位置的资料: 云服务器监控接口 腾讯云go-sdk example 方法一:使用腾讯云go-sdk go.mod文件中增加这样一行: github.com/tencent ...

  4. Laravel5.4框架中视图共享数据的方法详解

    本文实例讲述了Laravel5.4框架中视图共享数据的方法.分享给大家供大家参考,具体如下: 每个人都会遇到这种情况:某些数据还在每个页面进行使用,比如用户信息,或者菜单数据,最基本的做法是在每个视图 ...

  5. PHP中对用户身份认证实现两种方法

    用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制.     当访问者浏览受保护页面时,客户端浏览器会弹出对话 ...

  6. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  7. Java学习笔记——可视化Swing中JTable控件绑定SQL数据源的两种方法

    在 MyEclipse 的可视化 Swing 中,有 JTable 控件. JTable 用来显示和编辑常规二维单元表. 那么,如何将 数据库SQL中的数据绑定至JTable中呢? 在这里,提供两种方 ...

  8. 怎么在CAD中测量图纸距离?来看看这两种方法

    在CAD中设计图纸最重要的就是图纸的尺寸,俗话说也就是图纸间的距离.通过正确的数据设计出的图纸才能够准确,也能够避免施工时事不必要的误差.那怎么在CAD中测量图纸距离呢?具体要怎么来进行操作呢?下面我 ...

  9. PyQt(Python+Qt)学习随笔:model/view架构中支持QListView列表中展示图标的两种方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QListView列表视图中的项不但可以展示文字,也可以展示图标和复选框,同时可以指定项是否可以拖 ...

  10. Redis中持久化的两种方法详解

    Redis提供了两种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里;另一种方法教只追加文件(append-only f ...

随机推荐

  1. RookeyFrame在线新增模块

    今天给大家演示下在线新增模块的功能,在线新增模块跟在vs中写model实体类区别不大,线上新增少了手动初始化的过程,新增后模块同样具备新增.修改.删除.查看.导入.导出.复制.批量编辑.回收站.草稿箱 ...

  2. MySQL整形手工注入

    0x1 判断注入点: http://www.xxx.org/members.php?id=1 and 1=1 --+ # ture http://www.xxx.org/members.php?id= ...

  3. vue学习指南:第十篇(详细) - Vue的 动画

    Vue 提供了一些不同的过度效果,主要根 v-if v-show 动态组件 1. Vue给动画分了6个过程,在css中,扮演6个类, 1.  .v-enter定义动画的开始状态 2.  .v-ente ...

  4. 微信小程序的线程架构

    小程序的线程架构 每个小程序包含一个描述整体程序的app实例和多个描述页面的page. 其中app由3个文件构成: app.json 公共配置文件 app.wxss 公共样式文件 app.js 主体逻 ...

  5. 9.为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗?

    作者:中华石杉 面试题 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 dubbo 可以吗? 面试官心理分析 从这个问题开始就进行分布式系统环节了,现在出去面试分布式都成标配了,没有哪个公司不问问 ...

  6. 6. [mmc subsystem] mmc core(第六章)——mmc core主模块

    一.说明 1.mmc core概述 mmc core主模块是mmc core的实现核心.也是本章的重点内容. 对应代码位置drivers/mmc/core/core.c. 其主要负责如下功能: mmc ...

  7. 论文笔记系列-AutoFPN

    原论文:Auto-FPN: Automatic Network Architecture Adaptation for Object Detection Beyond Classification 之前 ...

  8. qt需求

    1.登录框 账号密码 复杂度判断 2.监控  权限认证 (5分钟必须锁定,退回登录状态)--b/s 3.exe 嵌入exe (什么时间触发了什么消息,任何消息触发都可以,日志文件zlog,5分钟没有写 ...

  9. HardFault_Handler的方法转载

    在硬汉平台看到一个比较好的帖子,关于如何定位HardFault_Handler,这里要记录下网址. http://www.armbbs.cn/forum.php?mod=viewthread& ...

  10. maxima已知方程,计算结果