Laravel5.5 视图 - 创建视图和数据传递示例


Posted in PHP onOctober 21, 2019

创建视图

视图包含应用的 HTML 代码,并将应用的控制器逻辑和表现逻辑进行分离。视图文件存放在 resources/views 目录中。下面是一个简单的视图示例:

<!-- resources/views/greeting.blade.php 视图文件 -->
 
<html>
  <body>
    <h1>Hello, {{ $name }}</h1>
  </body>
</html>

可以通过辅助函数 view ,返回这个视图响应:

Route::get('/', function () {
  return view('greeting', ['name' => 'jack']);
});

view 方法的第一个参数是 resources/views 目录下相应的视图文件的名称,第二个参数是一个数组,表示传递给视图文件的数据。

在这个例子中,我们传递了一个 name 变量,在视图中通过使用 Blade 语法将其显示出来。

当然,视图还可以存放在 resources/views 的子目录中,用“.”号来引用子目录中的视图。

例如,如果视图存放路径是 resources/views/admin/profile.blade.php,那么我们可以这样引用它:

return view('admin.profile', $data);

判断视图是否存在

如果需要判断视图是否存在,可调用 View 门面上的 exists 方法,如果视图存在则返回 true:

use Illuminate\Support\Facades\View;
 
if (View::exists('emails.customer')) {
  //
}

创建第一个有效视图

调用 View 门面上的 first 方法,可以用于创建给定视图数组中的第一个存在的视图:

use Illuminate\Support\Facades\View;
 
return View::first(['custom.admin', 'admin'], $data);

这个功能在应用或扩展包允许视图被自定义或覆盖时很有用。

传递数据到视图

可以简单通过数组方式将数据传递到视图:

return view('greeting', ['name' => 'jack']);

除此之外,还可以通过 with 方法传递独立的数据片段到视图:

$view = view('greeting')->with('name', 'jack');

在视图间共享数据

有时候,我们需要在所有视图之间共享数据片段,这时可以使用视图门面的 share 方法,通常,需要在某个服务提供者的 boot 方法中调用 share 方法,你可以将其添加到 AppServiceProvider 或生成独立的服务提供者来存放这段代码逻辑:

<?php
 
namespace App\Providers;
 
use View;
 
class AppServiceProvider extends ServiceProvider
{
  /**
   * 启动所有应用服务
   *
   * @return void
   */
  public function boot()
  {
    View::share('key', 'value');
  }
 
  /**
   * 注册服务提供者
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

视图 Composer

视图 Composer 是当视图被渲染时的回调函数或类方法。

如果你有一些数据需要在视图每次渲染时都做绑定,可以使用视图 Composer 将逻辑组织到一个单独的地方。

在本例中,首先要在某个服务提供者中注册视图 Composer,我们将会使用 View 门面来访问 Illuminate\Contracts\View\Factory 的底层实现,记住,Laravel 不会包含默认的视图 Composer 目录,我们可以按照自己的喜好组织其路径,例如可以创建一个 app/Http/ViewComposers 目录:

<?php
 
namespace App\Providers;
 
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
 
class ComposerServiceProvider extends ServiceProvider
{
  /**
   * 在容器中注册绑定.
   *
   * @return void
   */
  public function boot()
  {
    // 使用基于类方法的 composers...
    View::composer(
      'profile', 'App\Http\ViewComposers\ProfileComposer'
    );
 
    // 使用基于回调函数的 composers...
    View::composer('dashboard', function ($view) {});
  }
 
  /**
   * 注册服务提供者.
   *
   * @return void
   */
  public function register()
  {
    //
  }
}

注:如果创建一个新的服务提供者来包含视图 Composer 注册,需要添加该服务提供者到配置文件 config/app.php 的 providers 数组中。

现在我们已经注册了视图 Composer,每次 profile 视图被渲染时都会执行 ProfileComposer@compose 方法,接下来我们来定义该 Composer 类:

<?php
 
namespace App\Http\ViewComposers;
 
use Illuminate\View\View;
use Illuminate\Repositories\UserRepository;
 
class ProfileComposer
{
  /**
   * 用户仓库实现.
   *
   * @var UserRepository
   */
  protected $users;
 
  /**
   * 创建一个新的属性composer.
   *
   * @param UserRepository $users
   * @return void
   */
  public function __construct(UserRepository $users)
  {
    // 依赖注入通过服务容器自动解析...
    $this->users = $users;
  }
 
  /**
   * 绑定数据到视图.
   *
   * @param View $view
   * @return void
   */
  public function compose(View $view)
  {
    $view->with('count', $this->users->count());
  }
}

视图被渲染前,Composer 类的 compose 方法被调用,同时 Illuminate\View\View 实例被注入该方法,从而可以使用其 with 方法来绑定数据到视图。

注:所有视图 Composer 都通过服务容器被解析,所以你可以在 Composer 类的构造函数中声明任何你需要的依赖。

添加 Composer 到多个视图

你可以传递视图数组作为 composer 方法的第一个参数来一次性将视图 Composer 添加到多个视图:

View::composer(
  ['profile', 'dashboard'],
  'App\Http\ViewComposers\MyViewComposer'
);
composer 方法还支持 * 通配符,允许将一个 Composer 添加到所有视图:

View::composer('*', function ($view) {
  //
});

视图创建器

视图创建器和视图 Composer 非常类似,不同之处在于前者在视图实例化之后立即失效而不是等到视图即将渲染。

使用 View 门面的 creator 方法即可注册一个视图创建器:

View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');

以上这篇Laravel5.5 视图 - 创建视图和数据传递示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
一个颜色轮换的简单例子
Oct 09 PHP
下载文件的点击数回填
Oct 09 PHP
php heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
php实现图片添加水印功能
Feb 13 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
简单了解PHP编程中数组的指针的使用
Nov 30 PHP
修改WordPress中文章编辑器的样式的方法详解
Dec 15 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
php框架知识点的整理和补充
Mar 01 PHP
详解Laravel框架的依赖注入功能
May 27 PHP
laravel orm 关联条件查询代码
Oct 21 #PHP
浅谈laravel orm 中的一对多关系 hasMany
Oct 21 #PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
Oct 21 #PHP
Laravel ORM 数据model操作教程
Oct 21 #PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
Oct 21 #PHP
laravel 解决多库下的DB::transaction()事务失效问题
Oct 21 #PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 #PHP
You might like
php 上传文件类型判断函数(避免上传漏洞 )
2010/06/08 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
javascript实现的listview效果
2007/04/28 Javascript
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
微信小程序左滑删除功能开发案例详解
2018/11/12 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
Python实现豆瓣图片下载的方法
2015/05/25 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
Python包和模块的分发详细介绍
2020/06/19 Python
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
Linux开机引导的步骤是什么
2015/10/19 面试题
小学毕业家长寄语
2014/01/19 职场文书
关于读书的演讲稿800字
2014/08/27 职场文书
科学发展观活动总结
2014/08/28 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
尼克胡哲观后感
2015/06/08 职场文书
2015年教师国培感言
2015/08/01 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
Python预测分词的实现
2021/06/18 Python
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript