Skip to content
赞助商
虚位以待
赞助商
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

视图

创建视图

NOTE

想了解更多关于如何编写 Blade 模板的信息?请查看完整的 Blade 文档 以开始。

视图包含应用程序提供的 HTML,并将控制器/应用程序逻辑与表示逻辑分离。视图存储在 resources/views 目录中。一个简单的视图可能如下所示:

php
<!-- 视图存储在 resources/views/greeting.blade.php -->

<html>
    <body>
        <h1>Hello, {{ $name }}</h1>
    </body>
</html>

由于此视图存储在 resources/views/greeting.blade.php,我们可以使用全局 view 辅助函数返回它,如下所示:

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

如您所见,传递给 view 辅助函数的第一个参数对应于 resources/views 目录中视图文件的名称。第二个参数是一个数据数组,该数据应在视图中可用。在此示例中,我们传递了 name 变量,该变量使用 Blade 语法 在视图中显示。

视图也可以嵌套在 resources/views 目录的子目录中。可以使用“点”符号引用嵌套视图。例如,如果您的视图存储在 resources/views/admin/profile.blade.php,您可以这样引用它:

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

NOTE

视图目录名称不应包含 . 字符。

确定视图是否存在

如果需要确定视图是否存在,可以使用 View facade。exists 方法将返回 true,如果视图存在:

php
use Illuminate\Support\Facades\View;

if (View::exists('emails.customer')) {
    //
}

创建第一个可用视图

使用 first 方法,您可以创建给定视图数组中第一个存在的视图。如果您的应用程序或包允许视图自定义或覆盖,这将非常有用:

php
return view()->first(['custom.admin', 'admin'], $data);

您也可以通过 View facade 调用此方法:

php
use Illuminate\Support\Facades\View;

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

向视图传递数据

如您在前面的示例中所见,您可以将数据数组传递给视图:

php
return view('greetings', ['name' => 'Victoria']);

以这种方式传递信息时,数据应为键/值对数组。在视图中,您可以使用相应的键访问每个值,例如 <?php echo $key; ?>。作为将完整数据数组传递给 view 辅助函数的替代方法,您可以使用 with 方法向视图添加单个数据:

php
return view('greeting')->with('name', 'Victoria');

与所有视图共享数据

有时,您可能需要与应用程序渲染的所有视图共享一段数据。您可以使用视图 facade 的 share 方法来实现。通常,您应该在服务提供者的 boot 方法中放置对 share 的调用。您可以将它们添加到 AppServiceProvider 或生成单独的服务提供者来容纳它们:

php
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 注册任何应用程序服务。
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * 启动任何应用程序服务。
     *
     * @return void
     */
    public function boot()
    {
        View::share('key', 'value');
    }
}

视图作曲器

视图作曲器是当视图被渲染时调用的回调或类方法。如果您有数据希望在每次渲染视图时绑定到视图,视图作曲器可以帮助您将逻辑组织到一个位置。

在此示例中,让我们在 服务提供者 中注册视图作曲器。我们将使用 View facade 访问底层的 Illuminate\Contracts\View\Factory 合约实现。请记住,Laravel 不包含视图作曲器的默认目录。您可以自由地组织它们。例如,您可以创建一个 app/Http/View/Composers 目录:

php
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ViewServiceProvider extends ServiceProvider
{
    /**
     * 注册任何应用程序服务。
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * 启动任何应用程序服务。
     *
     * @return void
     */
    public function boot()
    {
        // 使用基于类的作曲器...
        View::composer(
            'profile', 'App\Http\View\Composers\ProfileComposer'
        );

        // 使用基于闭包的作曲器...
        View::composer('dashboard', function ($view) {
            //
        });
    }
}

NOTE

请记住,如果您创建了一个新的服务提供者来包含视图作曲器注册,您需要将服务提供者添加到 config/app.php 配置文件中的 providers 数组中。

现在我们已经注册了作曲器,每次渲染 profile 视图时,ProfileComposer@compose 方法将被执行。因此,让我们定义作曲器类:

php
<?php

namespace App\Http\View\Composers;

use App\Repositories\UserRepository;
use Illuminate\View\View;

class ProfileComposer
{
    /**
     * 用户仓库实现。
     *
     * @var UserRepository
     */
    protected $users;

    /**
     * 创建一个新的配置文件作曲器。
     *
     * @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());
    }
}

在视图渲染之前,作曲器的 compose 方法会被调用,并传入 Illuminate\View\View 实例。您可以使用 with 方法将数据绑定到视图。

NOTE

所有视图作曲器都是通过 服务容器 解析的,因此您可以在作曲器的构造函数中类型提示任何所需的依赖项。

将作曲器附加到多个视图

您可以通过将视图数组作为 composer 方法的第一个参数传递,将视图作曲器附加到多个视图:

php
View::composer(
    ['profile', 'dashboard'],
    'App\Http\View\Composers\MyViewComposer'
);

composer 方法还接受 * 字符作为通配符,允许您将作曲器附加到所有视图:

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

视图创建者

视图创建者与视图作曲器非常相似;然而,它们在视图实例化后立即执行,而不是等待视图即将渲染时。要注册视图创建者,请使用 creator 方法:

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

优化视图

默认情况下,视图是按需编译的。当执行渲染视图的请求时,Laravel 将确定是否存在视图的已编译版本。如果文件存在,Laravel 将确定未编译视图是否比已编译视图更早修改。如果已编译视图不存在,或者未编译视图已被修改,Laravel 将重新编译视图。

在请求期间编译视图会对性能产生负面影响,因此 Laravel 提供了 view:cache Artisan 命令来预编译应用程序使用的所有视图。为了提高性能,您可能希望在部署过程中运行此命令:

php
php artisan view:cache

您可以使用 view:clear 命令清除视图缓存:

php
php artisan view:clear