> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# 视图

> 介绍如何在 Laravel 中创建视图并从路由或控制器中返回，以及如何向视图传递数据。

## 简介

在路由或控制器中把整个 HTML 文档以字符串形式返回并不现实。
使用视图后，你可以将所有 HTML 编写在独立的文件中。

视图将控制器 / 应用逻辑与展示逻辑分离，存放在 `resources/views` 目录下。
在 Laravel 中，通常使用 [Blade 模板语言](/zh/blade)来编写视图。

```blade theme={null}
<!-- resources/views/greeting.blade.php -->
<html>
    <body>
        <h1>你好，{{ $name }}</h1>
    </body>
</html>
```

该视图存放在 `resources/views/greeting.blade.php` 中，可以通过全局的 `view` 辅助函数来返回。

```php theme={null}
Route::get('/', function () {
    return view('greeting', ['name' => '太郎']);
});
```

## 创建视图

要创建视图，可以在 `resources/views` 目录中放置扩展名为 `.blade.php` 的文件，或使用 Artisan 命令。

```shell theme={null}
php artisan make:view greeting
```

`.blade.php` 扩展名会告诉框架，该文件是一个 [Blade 模板](/zh/blade)。

## 返回视图

创建视图之后，就可以在路由或控制器中使用全局 `view` 辅助函数返回它。

```php theme={null}
Route::get('/', function () {
    return view('greeting', ['name' => '太郎']);
});
```

也可以使用 `View` 门面来返回。

```php theme={null}
use Illuminate\Support\Facades\View;

return View::make('greeting', ['name' => '太郎']);
```

`view` 辅助函数的第一个参数对应 `resources/views` 目录中视图文件的名称。
第二个参数是可以在视图中使用的数据数组。

### 嵌套的视图目录

视图可以嵌套到 `resources/views` 的子目录中。
要引用嵌套视图，请使用「点」记法。

例如，存放于 `resources/views/admin/profile.blade.php` 的视图，可以像下面这样返回。

```php theme={null}
return view('admin.profile', $data);
```

<Warning>
  视图的目录名中不要包含 `.` 字符。
</Warning>

### 返回第一个存在的视图

使用 `View` 门面的 `first` 方法，可以返回视图数组中第一个存在的视图。

```php theme={null}
use Illuminate\Support\Facades\View;

return View::first(['custom.admin', 'admin'], $data);
```

### 视图存在性判断

要判断视图是否存在，请使用 `View` 门面的 `exists` 方法。

```php theme={null}
use Illuminate\Support\Facades\View;

if (View::exists('admin.profile')) {
    // ...
}
```

## 向视图传递数据

正如前面的示例所示，你可以将数据数组传给视图，并在视图内使用这些数据。

```php theme={null}
return view('greetings', ['name' => '花子']);
```

在这种方式下，数据必须是键值对形式的数组。
在视图内可以通过数据的键访问对应的值。

也可以使用 `with` 方法逐个添加数据。
`with` 方法返回视图对象实例，因此可以链式调用。

```php theme={null}
return view('greeting')
    ->with('name', '花子')
    ->with('occupation', '工程师');
```

## 在所有视图之间共享数据

如果希望在所有视图之间共享数据，可以使用 `View` 门面的 `share` 方法。
通常写在服务提供者的 `boot` 方法中。

```php theme={null}
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 应用服务的启动处理
     */
    public function boot(): void
    {
        View::share('appName', 'MyApp');
    }
}
```

## 视图优化

默认情况下，Blade 模板视图是按需编译的。
由于视图的编译处理会在请求时执行，因此可能会对性能产生轻微影响。

`view:cache` Artisan 命令可以预先编译应用中使用的所有视图。
建议将其作为部署流程的一部分执行。

```shell theme={null}
php artisan view:cache
```

要清除视图缓存，请使用如下命令。

```shell theme={null}
php artisan view:clear
```

## 下一步

<Card title="Blade 模板" icon="code" href="/zh/blade">
  学习如何使用 Blade 语法构建动态视图。
</Card>


## Related topics

- [Laravel 包开发](/zh/advanced/package-development.md)
- [HTTP 测试](/zh/http-tests.md)
- [Blade 模板](/zh/blade.md)
- [Laravel 12 升级到 13 指南](/zh/blog/upgrade-12-to-13.md)
- [Laravel Fortify 与 Starter Kit](/zh/advanced/fortify.md)
