详解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一些公用函数的集合
Mar 27 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
使用PHP Socket写的POP3类
Oct 30 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
php自动识别文字编码并转换为目标编码的方法
Aug 08 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
PHP实现图片的等比缩放和Logo水印功能示例
May 04 PHP
php生出随机字符串
Jul 06 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
WordPress免插件实现面包屑导航的示例代码
Aug 20 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代码(抓取网页中的邮箱地址)
2012/07/17 PHP
php获取域名的google收录示例
2014/03/24 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
jQuery 3 中的新增功能汇总介绍
2016/06/12 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
2020/11/24 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
python基础教程之字典操作详解
2014/03/25 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
详解django.contirb.auth-认证
2018/07/16 Python
代码详解django中数据库设置
2019/01/28 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
大学生水文观测实习自我鉴定
2013/09/29 职场文书
会议活动邀请函
2014/01/27 职场文书
毕业生个人求职自荐信
2014/02/26 职场文书
委托协议书范本
2014/04/22 职场文书
企业安全生产检查制度
2015/08/06 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书