详解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数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
将博客园(cnblogs.com)数据导入到wordpress的代码
Jan 06 PHP
php添加文章时生成静态HTML文章的实现代码
Feb 17 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
Windows下的PHP安装pear教程
Oct 24 PHP
php遍历CSV类实例
Apr 14 PHP
PHP+MySQL之Insert Into数据插入用法分析
Sep 27 PHP
yii权限控制的方法(三种方法)
Dec 28 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 PHP
php的socket编程详解
Nov 20 PHP
PHP实现对xml的增删改查操作案例分析
May 19 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 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
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
2014/08/08 PHP
PHP生成随机字符串(3种方法)
2015/09/25 PHP
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
2014/01/11 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
原生JS实现仿淘宝网左侧商品分类菜单效果代码
2015/09/10 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
非常优秀的JS图片轮播插件Swiper的用法
2017/01/03 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python解析多层json操作示例
2019/12/30 Python
python ETL工具 pyetl
2020/06/07 Python
python实现猜拳游戏项目
2020/11/30 Python
阿里云:Aliyun.com
2017/02/15 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
vue项目实现分页效果
2021/03/24 Vue.js
师范应届毕业生自荐信
2013/11/18 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
社区重阳节活动总结
2015/03/24 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
Android自定义双向滑动控件
2022/04/19 Java/Android
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL