跳转到主要内容

简介

在路由或控制器中把整个 HTML 文档以字符串形式返回并不现实。 使用视图后,你可以将所有 HTML 编写在独立的文件中。 视图将控制器 / 应用逻辑与展示逻辑分离,存放在 resources/views 目录下。 在 Laravel 中,通常使用 Blade 模板语言来编写视图。
<!-- resources/views/greeting.blade.php -->
<html>
    <body>
        <h1>你好,{{ $name }}</h1>
    </body>
</html>
该视图存放在 resources/views/greeting.blade.php 中,可以通过全局的 view 辅助函数来返回。
Route::get('/', function () {
    return view('greeting', ['name' => '太郎']);
});

创建视图

要创建视图,可以在 resources/views 目录中放置扩展名为 .blade.php 的文件,或使用 Artisan 命令。
php artisan make:view greeting
.blade.php 扩展名会告诉框架,该文件是一个 Blade 模板

返回视图

创建视图之后,就可以在路由或控制器中使用全局 view 辅助函数返回它。
Route::get('/', function () {
    return view('greeting', ['name' => '太郎']);
});
也可以使用 View 门面来返回。
use Illuminate\Support\Facades\View;

return View::make('greeting', ['name' => '太郎']);
view 辅助函数的第一个参数对应 resources/views 目录中视图文件的名称。 第二个参数是可以在视图中使用的数据数组。

嵌套的视图目录

视图可以嵌套到 resources/views 的子目录中。 要引用嵌套视图,请使用「点」记法。 例如,存放于 resources/views/admin/profile.blade.php 的视图,可以像下面这样返回。
return view('admin.profile', $data);
视图的目录名中不要包含 . 字符。

返回第一个存在的视图

使用 View 门面的 first 方法,可以返回视图数组中第一个存在的视图。
use Illuminate\Support\Facades\View;

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

视图存在性判断

要判断视图是否存在,请使用 View 门面的 exists 方法。
use Illuminate\Support\Facades\View;

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

向视图传递数据

正如前面的示例所示,你可以将数据数组传给视图,并在视图内使用这些数据。
return view('greetings', ['name' => '花子']);
在这种方式下,数据必须是键值对形式的数组。 在视图内可以通过数据的键访问对应的值。 也可以使用 with 方法逐个添加数据。 with 方法返回视图对象实例,因此可以链式调用。
return view('greeting')
    ->with('name', '花子')
    ->with('occupation', '工程师');

在所有视图之间共享数据

如果希望在所有视图之间共享数据,可以使用 View 门面的 share 方法。 通常写在服务提供者的 boot 方法中。
<?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 命令可以预先编译应用中使用的所有视图。 建议将其作为部署流程的一部分执行。
php artisan view:cache
要清除视图缓存,请使用如下命令。
php artisan view:clear

下一步

Blade 模板

学习如何使用 Blade 语法构建动态视图。
最后修改于 2026年7月13日