详解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.MVC的模板标签系统(五)
Sep 05 PHP
新浪新闻小偷
Oct 09 PHP
加强版phplib的DB类
Mar 31 PHP
在mysql数据库原有字段后增加新内容
Nov 26 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
Jun 24 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
CI框架集成Smarty的方法分析
May 17 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
PHP安全之register_globals的on和off的区别
Jul 23 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 压缩文件夹的类代码
2009/11/05 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
php用数组返回无限分类的列表数据的代码
2010/08/08 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
php常用字符串处理函数实例分析
2014/11/22 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
javascript offsetX与layerX区别
2010/03/12 Javascript
JavaScript 数组运用实现代码
2010/04/13 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
JavaScript实现QueryString获取GET参数的方法
2013/07/02 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
如何实现一个简易版的vuex持久化工具
2019/09/11 Javascript
angular异步验证防抖踩坑实录
2019/12/01 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python实现国外赌场热门游戏Craps(双骰子)
2015/03/31 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
建筑公司文秘岗位职责
2013/11/29 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
本科毕业论文导师评语
2014/12/31 职场文书
毕业生就业推荐表自我鉴定
2019/06/20 职场文书
合作意向书怎么写
2019/06/24 职场文书
python中sys模块的介绍与实例
2021/04/17 Python
解决Swagger2返回map复杂结构不能解析的问题
2021/07/02 Java/Android
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android