详解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 相关文章推荐
10个可以简化php开发过程的MySQL工具
Apr 11 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
Feb 18 PHP
php将字符串转化成date存入数据库的两种方式
Apr 28 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
ThinkPHP自动转义存储富文本编辑器内容导致读取出错的解决方法
Aug 08 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
Nov 19 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
PHP调用Mailgun发送邮件的方法
May 04 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
阿里云服务器搭建Php+Apache运行环境的详细过程
May 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
php 修改zen-cart下单和付款流程以防止漏单
2010/03/08 PHP
深入php内核之php in array
2015/11/10 PHP
Yii框架连接mongodb数据库的代码
2016/07/27 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
无阻塞加载脚本分析[全]
2011/01/20 Javascript
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
vue 组件中slot插口的具体用法
2018/04/03 Javascript
简述vue路由打开一个新的窗口的方法
2018/11/29 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
关于ligerui子页面关闭后,父页面刷新,重新加载的方法
2019/09/27 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
Python编程快速上手——PDF文件操作案例分析
2020/02/28 Python
python画环形图的方法
2020/03/25 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
澳大利亚便宜隐形眼镜购买网站:QUICKLENS Australia
2018/10/06 全球购物
日常奢侈品,轻松购物:Verishop
2019/08/20 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
北京银河万佳Java面试题
2012/03/21 面试题
Java程序开发中如何应用线程
2016/03/03 面试题
2014年应届大学生自我评价
2014/01/09 职场文书
《石榴》教学反思
2014/03/02 职场文书
上诉状格式
2015/05/23 职场文书
小型婚礼主持词
2015/06/30 职场文书
社团招新宣传语
2015/07/13 职场文书
学校隐患排查制度
2015/08/05 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
导游词之无锡古运河
2019/11/14 职场文书