详解Laravel视图间共享数据与视图Composer


Posted in PHP onAugust 04, 2016

1、在视图间共享数据

除了在单个视图中传递指定数据之外,有时候需要在所有视图中传入同一数据,即我们需要在不同视图中共享数据。要实现这一目的,需要使用视图工厂的share方法。

全局帮助函数viewresponse类似,如果传入参数,则返回Illuminate\View\View实例,不传入参数则返回Illuminate\View\Factory实例。所以我们可以通过在服务提供者的boot方法中使用如下方式实现视图间共享数据:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
    //视图间共享数据
    view()->share('sitename','Laravel学院');
  }

  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

我们在routes.php中定义两个路由:

Route::get('testViewHello',function(){
  return view('hello');
});

Route::get('testViewHome',function(){
  return view('home');
});

然后在resources/views目录下创建一个home.blade.php视图文件,内容如下:

{{$sitename}}首页

再创建一个hello.blade.php视图文件:

欢迎来到{{$sitename}}!

在浏览器中分别访问http://laravel.app:8000/testViewHellohttp://laravel.app:8000/testViewHome,则都能解析出$sitename的值。

2、视图Composer

有时候我们想要在每次视图渲染时绑定一些特定数据到视图中,比如登录用户信息,这时候我们就要用到视图Composer,视图Composer通过视图工厂的composer方法实现。该方法的第二个回调参数支持基于控制器动作和闭包函数两种方式。

简单起见,我们还是基于AppServiceProvider,不去单独创建服务提供者,这里我们传递闭包参数(控制器动作参考视图文档):

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
  /**
   * Bootstrap any application services.
   *
   * @return void
   */
  public function boot()
  {
    //视图间共享数据
    view()->share('sitename','Laravel学院');

    //视图Composer
    view()->composer('hello',function($view){
      $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
    });
  }

  /**
   * Register any application services.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

修改hello.blade.php视图文件:

欢迎来到{{$sitename}}!

<h3>用户信息</h3>
用户名:{{$user['name']}}<br>
用户头像:{{$user['avatar']}}

在浏览器中访问http://laravel.app:8000/testViewHello,输出内容如下:

欢迎来到Laravel学院!

用户信息

用户名:test
用户头像:/path/to/test.jpg

你也可以传递数据到多个视图:

view()->composer(['hello','home'],function($view){
  $view->with('user',array('name'=>'test','avatar'=>'/path/to/test.jpg'));
});

甚至所有视图(使用通配符*):

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

以上就是Laravel视图间共享数据及视图Composer的详细内容,希望本文对大家学习Laravel有所帮助。

PHP 相关文章推荐
PHP中实现进程间通讯
Oct 09 PHP
php4的session功能评述(一)
Oct 09 PHP
PHP 采集获取指定网址的内容
Jan 05 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
PHP定时任务获取微信access_token的方法
Oct 10 PHP
基于thinkPHP类的插入数据库操作功能示例
Jan 06 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
PHP实现负载均衡下的session共用功能
Apr 17 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
Aug 17 PHP
PHP实现的操作数组类库定义与用法示例
May 24 PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 #PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 #PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 #PHP
浅析php如何实现App常用的秒发功能
Aug 03 #PHP
php微信开发之带参数二维码的使用
Aug 03 #PHP
PHP支付系统设计与典型案例分享
Aug 02 #PHP
php微信支付接口开发程序
Aug 02 #PHP
You might like
PHP循环获取GET和POST值的代码
2008/04/09 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
JavaScript 异步调用框架 (Part 4 - 链式调用)
2009/08/04 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
原生JavaScript实现幻灯片效果
2021/02/19 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
Python数据结构与算法之图结构(Graph)实例分析
2017/09/05 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
2018/10/09 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
python元组拆包实现方法
2021/02/28 Python
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
大学生简历的个人自我评价
2013/12/04 职场文书
中学门卫岗位职责
2013/12/26 职场文书
心得体会范文
2014/01/04 职场文书
大学生蛋糕店创业计划书
2014/01/13 职场文书
小学生中国梦演讲稿
2014/04/23 职场文书
精彩的演讲稿开头
2014/05/08 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
画展邀请函
2015/01/31 职场文书
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python