详解Laravel视图间共享数据与视图Composer

 更新时间:2016年08月04日 11:05:13   投稿:daisy  
视图的基本使用很简单,可查看视图文档了解详情,今天这里我们演示两个使用示例:在视图间共享数据和视图Composer。下面一起来看看。

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中set error handler函数用法小结

    PHP中set error handler函数用法小结

    set_error_handler() 函数设置用户自定义的错误处理函数。该函数用于创建运行时期间的用户自己的错误处理方法。该函数会返回旧的错误处理程序,若失败,则返回 null
    2015-11-11
  • Yii中表单用法实例详解

    Yii中表单用法实例详解

    这篇文章主要介绍了Yii中表单用法,结合实例形式较为详细的分析总结了Yii针对表单的各种常用操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-01-01
  • thinkphp框架表单数组实现图片批量上传功能示例

    thinkphp框架表单数组实现图片批量上传功能示例

    这篇文章主要介绍了thinkphp框架表单数组实现图片批量上传功能,结合实例形式分析了js前端图片上传与后台thinkPHP文件处理相关操作技巧,需要的朋友可以参考下
    2020-04-04
  • 利用laravel搭建一个迷你博客实战教程

    利用laravel搭建一个迷你博客实战教程

    这篇文章主要给大家介绍了关于利用laravel搭建一个迷你博客的相关资料,文中将一步步的实现步骤通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • php图片的裁剪与缩放生成符合需求的缩略图

    php图片的裁剪与缩放生成符合需求的缩略图

    用在移动设备上时显示效果不好且流量巨大,需要对现有图片库的图片进行一次处理,生成符合移动设备用的缩略图,将原来客户端JS做的工作转移到服务器端用PHP的GD库来集中处理,感兴趣的朋友可以了解下
    2013-01-01
  • php实现根据IP地址获取其所在省市的方法

    php实现根据IP地址获取其所在省市的方法

    今天,就讨论一下在PHP中如何获取用户IP地址、PHP根据IP判断用户所在城市以及PHP根据IP实现城市切换或跳转的问题。
    2015-04-04
  • PHP+iframe图片上传实现即时刷新效果

    PHP+iframe图片上传实现即时刷新效果

    下面小编就为大家带来一篇PHP+iframe图片上传实现即时刷新效果。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • PHP实现采集程序原理和简单示例代码

    PHP实现采集程序原理和简单示例代码

    PHP实现采集程序原理和简单示例代码...
    2007-03-03
  • PHP isset empty函数相关面试题及解析

    PHP isset empty函数相关面试题及解析

    这篇文章主要介绍了PHP isset empty函数相关面试题及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 解决php extension 加载顺序问题

    解决php extension 加载顺序问题

    这篇文章主要介绍了解决php extension 加载顺序问题,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08

最新评论