详解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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
source.php查看源文件
Dec 09 PHP
PHP 万年历实现代码
Oct 18 PHP
深入PHP autoload机制的详解
Jun 09 PHP
解析PHP中empty is_null和isset的测试
Jun 29 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
CodeIgniter中实现泛域名解析
Jul 19 PHP
用 Composer构建自己的 PHP 框架之基础准备
Oct 30 PHP
php输出全球各个时区列表的方法
Mar 31 PHP
php 如何禁用eval() 函数实例详解
Dec 01 PHP
PHP检查网站是否宕机的方法示例
Jul 24 PHP
Laravel中获取IP的真实地理位置
Apr 01 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生成短网址的3种方法代码实例
2014/07/08 PHP
CentOS 安装 PHP5.5+Redis+XDebug+Nginx+MySQL全纪录
2015/03/25 PHP
PHP在线打包下载功能示例
2016/10/15 PHP
PHP AjaxForm提交图片上传并显示图片源码
2016/11/29 PHP
PHP实现的文件操作类及文件下载功能示例
2016/12/24 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
javascript各种复制代码收集
2008/09/20 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
2018/12/15 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
2020/01/10 Python
使用 Python ssh 远程登陆服务器的最佳方案
2020/03/06 Python
Python-for循环的内部机制
2020/06/12 Python
区分python中的进程与线程
2020/08/13 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
中国专业的音频分享平台:喜马拉雅
2019/05/24 全球购物
P D PAOLA法国官网:西班牙著名的珠宝首饰品牌
2020/02/15 全球购物
爱我中华演讲稿
2014/05/20 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
聚会通知怎么写
2015/04/23 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python