详解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 相关文章推荐
PHP4和PHP5性能测试和对比 测试代码与环境
Aug 17 PHP
php下获取客户端ip地址的函数
Mar 15 PHP
zend api扩展的php对象的autoload工具
Apr 18 PHP
mantis安装、配置和使用中的问题小结
Jul 14 PHP
Yii分页用法实例详解
Dec 04 PHP
php实现微信发红包
Dec 05 PHP
thinkPHP删除前弹出确认框的简单实现方法
May 16 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 PHP
Yii框架常见缓存应用实例小结
Sep 09 PHP
php输出形式实例整理
May 05 PHP
Laravel配合jwt使用的方法实例
Oct 25 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 isset()与empty()的使用区别详解
2010/08/29 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
php轻量级的性能分析工具xhprof的安装使用
2015/08/12 PHP
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
jQuery实现公告文字左右滚动的实例代码
2013/10/29 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
关于jQuery中的each方法(jQuery到底干了什么)
2014/03/05 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
jQuery $命名冲突解决方案汇总
2014/11/13 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
AngularJS指令详解及示例代码
2016/08/16 Javascript
JS只能输入正整数的简单实例
2016/10/07 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
对angular4子路由&amp;辅助路由详解
2018/10/09 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python找出list中最常出现元素的方法
2016/06/14 Python
浅谈python可视化包Bokeh
2018/02/07 Python
python 处理string到hex脚本的方法
2018/10/26 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
NET程序员上机面试题
2015/05/23 面试题
公司离职证明范本
2014/01/13 职场文书
家庭贫困证明范本(经典版)
2014/09/22 职场文书
python中sys模块的介绍与实例
2021/04/17 Python
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
python图像处理 PIL Image操作实例
2022/04/09 Python
MySQL优化之慢日志查询
2022/06/10 MySQL