详解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 相关文章推荐
dedecms模板标签代码官方参考
Mar 17 PHP
PHP 循环删除无限分类子节点的实现代码
Jun 21 PHP
PHP中使用php://input处理相同name值的表单数据
Feb 03 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
PHP封装的数据库保存session功能类
Jul 11 PHP
php封装的验证码工具类完整实例
Oct 19 PHP
CI(CodeIgniter)框架实现图片上传的方法
Mar 24 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
PHP PDOStatement::fetchAll讲解
Jan 31 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
Apr 06 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
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
PHP Class SoapClient not found解决方法
2018/01/20 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
IE8 浏览器Cookie的处理
2009/01/31 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
javascript replace()正则替换实现代码
2010/02/26 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
2015/03/26 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
图解prototype、proto和constructor的三角关系
2016/07/31 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
vue动态子组件的两种实现方式
2019/09/01 Javascript
python插入数据到列表的方法
2015/04/30 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
荷兰浴室和卫浴网上商店:Badkamerxxl.nl
2020/10/06 全球购物
const和static readonly区别
2013/05/20 面试题
银行类自荐信
2014/02/04 职场文书
房地产活动策划方案
2014/05/14 职场文书
新党章的学习心得体会
2014/11/07 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
结婚堵门保证书
2015/05/08 职场文书
刑事法律意见书
2015/06/04 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
MySQL创建管理LIST分区
2022/04/13 MySQL