详解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 过滤危险html代码
Jun 29 PHP
php date与gmdate的获取日期的区别
Feb 08 PHP
PHP的简易冒泡法代码分享
Aug 28 PHP
PHP中数字检测is_numeric与ctype_digit的区别介绍
Oct 04 PHP
php多功能图片处理类分享(php图片缩放类)
Mar 14 PHP
php获取当月最后一天函数分享
Feb 02 PHP
PHP Hash算法:Times33算法代码实例
May 13 PHP
PHP中iconv函数知识汇总
Jul 02 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
基于PHP+mysql实现新闻发布系统的开发
Aug 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
thinkphp中空模板与空模块的用法实例
2014/11/26 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
JavaScript 变量、作用域及内存
2015/04/08 Javascript
原生js实现移动端瀑布流式代码示例
2015/12/18 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
angularjs 中$apply,$digest,$watch详解
2016/10/13 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
2017/09/23 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
pytyon 带有重复的全排列
2013/08/13 Python
详解python中asyncio模块
2018/03/03 Python
python画一个玫瑰和一个爱心
2020/08/18 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
经济学博士求职自荐信范文
2013/11/23 职场文书
教师实习自我鉴定
2013/12/18 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
开学典礼演讲稿
2014/05/23 职场文书
会计系毕业求职信
2014/08/07 职场文书
大学生党课心得体会
2016/01/07 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
Golang全局变量加锁的问题解决
2021/05/08 Golang
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python
JS封装cavans多种滤镜组件
2022/02/15 Javascript