[TOC]
# 视图
## 创建视图
```
Route::get('/', function () {
return view('greeting', ['name' => 'James']);
});
<!-- 此视图文件位置 resources/views/greeting.blade.php -->
<html>
<body>
<h1>Hello, {{ $name }}</h1>
</body>
</html>
// 子目录,可以用「点」符号来引用嵌套视图
resources/views/admin/profile.blade.php
return view('admin.profile', $data);
```
### 判断视图文件是否存在
```
use Illuminate\Support\Facades\View;
if (View::exists('emails.customer')) {
//
}
```
### 创建第一个可用视图
```
return view()->first(['custom.admin', 'admin'], $data);
use Illuminate\Support\Facades\View;
return View::first(['custom.admin', 'admin'], $data);
```
## 向视图传递参数
```
return view('greetings', ['name' => 'Victoria']);
return view('greeting')->with('name', 'Victoria');
```
### 与所有视图共享数据
如果需要共享一段数据给应用程序的所有视图,你可以在服务提供器的`boot`方法中调用视图 Facade 的`share`方法。例如,可以将它们添加到`AppServiceProvider`或者为它们生成一个单独的服务提供器:
```
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::share('key', 'value');
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
```
>[success] 注意:注意,如果你创建了新的一个服务提供器来与所有视图共享数据,或者存放注册视图合成器的代码,那么你需要将这个服务提供器添加到配置文件`config/app.php`的`providers`数组中。
## 视图合成器
[参考文章](https://blog.csdn.net/weixin_41800559/article/details/106792309)
### 创建视图服务
```
$ php artisan make:provider ViewServiceProvider
```
### 定义视图服务
每次渲染第一参数的视图时都会执行视图合成器`compose`方法。
```
// 将这个服务提供器添加到配置文件 config/app.php 的 providers 数组中
'providers' => [
...
// 自定义视图服务
App\Providers\ViewServiceProvider::class,
],
// 在boot方法设置共享数据
public function boot()
{
// 所有视图共享数据
View::share('shareParam1', 'Laravel1');
// 使用类注册视图合成器
View::composer(
['index', 'index1'], 'App\Http\View\Composers\ShareComposer'
);
// 使用闭包函数注册视图合成器
View::composer(['index', 'index1'], function ($view) {
$view->with('shareParam3', 'Laravel3');
});
}
```
**将视图合成器添加到多个视图**
```
// 将一个视图合成器添加到多个视图
View::composer(
['profile', 'dashboard'],
'App\Http\View\Composers\MyViewComposer'
);
// 通配符`*`,表示将一个视图合成器添加到所有视图
View::composer('*', function ($view) {
//
});
```
>[success] 第一个参数:`*`表示全部视图,`path/*`表示path目录内的视图,数组表示多个视图
### 定义视图合成器
```
// 手动创建目录 App\Http\View\Composers,新增 ShareComposer.php 文件
<?php
namespace App\Http\View\Composers;
use Illuminate\View\View;
class ShareComposer
{
/**
* Create a new share composer.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$view->with('shareParam2', 'Laravel2');
}
}
```
### 模板显示数据
```
// 在视图文件中使用共享数据
{{ $shareParam1 }} {{ $shareParam2 }} {{ $shareParam3 }}
```
## 视图构造器
视图构造器在视图实例化之后执行,而视图合成器在视图即将渲染时执行。
```
View::creator('profile', 'App\Http\View\Creators\ProfileCreator');
```
- 入门指南
- 安装
- 部署
- 基础功能
- 路由
- 中间件
- CSRF 保护
- 控制器
- 请求
- 响应
- 视图
- URL
- Session
- 表单验证
- 错误
- 日志
- 前端开发
- Blade 模板
- 本地化
- 脚手架
- 编译资源 Mix
- 安全相关
- 用户认证
- API 认证
- 综合话题
- 命令行
- 广播
- 缓存
- 集合
- 事件
- 文件存储
- 辅助函数
- 邮件发送
- 消息通知
- 扩展包开发
- 队列
- 任务调度
- 数据库
- 快速入门
- 查询构造器
- 分页
- 数据库迁移
- 数据填充
- Redis
- Eloquent ORM
- 快速入门
- 速查表
- Artisan
- Auth
- Blade
- Cache
- Collection
- Composer
- Config
- Container
- Cookie
- DB
- Environment
- Event
- File
- Helper
- Input
- Lang
- Log
- Model
- Pagination
- Queue
- Redirect
- Request
- Response
- Route
- SSH
- Schema
- Security
- Session
- Storage
- String
- URL
- UnitTest
- Validation
- View