当前位置: 首页 > news >正文

laravel5.5 视图共享数据

视图间共享数据

  • 视图门面 share() 方法
  • 视图门面 composer() 方法
tips:都是使用 View 门面来访问 Illuminate\Contracts\View\Factory 的底层实现

视图share()

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

1,一般情况下,我会在app\http\Controllers\xx下创建一个基础控制器 BaseController.php

<?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() 是自定义的一个函数。

tips:
创建 app\Helpers\ExtmanFun.phpcomposer.jsonautoload引入

 "files":[
     "app/Helpers/ExtmanFun.php"
 ]
运行 composer dump-autoload 会自动加载

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

<?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服务提供器中注册视图合成器,
提供器代码如下:

<?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

<?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 方法来绑定数据到视图。

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

相关文章:

  • 小猿圈网站页面底部固定的方法
  • mysqlclient操作MySQL关系型数据库
  • Loadrunner报Failed to connect to server 127.0.0.1
  • poj1284(欧拉函数+原根)
  • 应用中有使用到集群么?多大规模?
  • Azure RIS的工作原理以及其与AWS RIs的比较
  • 使用DB业务拆分解决写压力大问题
  • JS中的值比较操作:==,===,Object.is()
  • 解决*.props打开失败问题
  • selector在手机上或浏览器显示各种姿势(虚拟下拉菜单)
  • 使用benchmarkSQL测试数据库的TPCC
  • 8.C(内存管理)
  • 产品上线后,出现BUG的处理流程
  • Greenplum修改GPCC的密码
  • 2019第十一周编程总结
  • 时间复杂度分析经典问题——最大子序列和
  • 2017前端实习生面试总结
  • Angularjs之国际化
  • CSS魔法堂:Absolute Positioning就这个样
  • JavaScript对象详解
  • MD5加密原理解析及OC版原理实现
  • PV统计优化设计
  • vagrant 添加本地 box 安装 laravel homestead
  • Vue 重置组件到初始状态
  • vue.js框架原理浅析
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 深入浅出Node.js
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • Spring Batch JSON 支持
  • 带你开发类似Pokemon Go的AR游戏
  • 关于Android全面屏虚拟导航栏的适配总结
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​VRRP 虚拟路由冗余协议(华为)
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #HarmonyOS:Web组件的使用
  • #if #elif #endif
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (八十八)VFL语言初步 - 实现布局
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (十六)串口UART
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)大型网站的系统架构
  • (转)可以带来幸福的一本书
  • .net wcf memory gates checking failed
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • /etc/shadow字段详解