详解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+DBM的同学录程序(1)
Oct 09 PHP
WordPress判断用户是否登录的代码
Mar 17 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
php生成excel文件的简单方法
Feb 08 PHP
PHP四大安全策略
Mar 12 PHP
ThinkPHP单字母函数(快捷方法)使用总结
Jul 23 PHP
PHP中的一些常用函数收集
May 26 PHP
php中session定期自动清理的方法
Nov 12 PHP
详解php比较操作符的安全问题
Dec 03 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
Dec 27 PHP
laravel通过a标签从视图向控制器实现传值
Oct 15 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种生成XML文件方法的速度效率比较
2012/10/06 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
jquery设置控件位置的方法
2013/08/21 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
2014/03/28 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
javascript定时器完整实例
2015/02/10 Javascript
JavaScript数组随机排列实现随机洗牌功能
2015/03/19 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
javascript+html5+css3自定义弹出窗口效果
2017/10/26 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
Vue路由的模块自动化与统一加载实现
2020/06/05 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
[03:12]完美世界DOTA2联赛PWL DAY6集锦
2020/11/05 DOTA
python网页请求urllib2模块简单封装代码
2014/02/07 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
Python实现基于POS算法的区块链
2018/08/07 Python
django模板结构优化的方法
2019/02/28 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
python利用platform模块获取系统信息
2020/10/09 Python
css3强大的动画效果animate使用说明及浏览器兼容介绍
2013/01/09 HTML / CSS
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
什么时候用assert
2015/05/08 面试题
夜大自我鉴定
2013/10/31 职场文书
小学班级特色活动方案
2014/08/31 职场文书
信用卡工资证明格式
2014/09/13 职场文书
田径运动会通讯稿
2014/09/13 职场文书
无犯罪记录证明
2014/09/19 职场文书
汽车转让协议书范本
2014/12/07 职场文书
2015年体育部工作总结
2015/04/02 职场文书
李强为自己工作观后感
2015/06/11 职场文书