Идёт обновление сайта. Несколько дней возможны сбои в оформлении и переводах. Документация работает — если страница выглядит сломанной, обновите её позже.

Документация
L Laravel L intervention/image
Войти
Главная Laravel 10.x Представления

Представления

10.x 7 мар 2026 г.

#Введение

Конечно, нецелесообразно возвращать целые HTML-документы в виде строк напрямую из маршрутов и контроллеров. К счастью, представления предоставляют удобный способ разместить весь наш HTML в отдельных файлах.

Представления отделяют логику контроллера / приложения от логики отображения и хранятся в каталоге resources/views. При использовании Laravel шаблоны представлений обычно пишутся с помощью языка шаблонов Blade. Простейшее представление может выглядеть примерно так:

<!-- Представление хранится в resources/views/greeting.blade.php -->

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

Поскольку это представление хранится в resources/views/greeting.blade.php, мы можем вернуть его с помощью глобального помощника view следующим образом:

Route::get('/', function () {
    return view('greeting', ['name' => 'James']);
});
Примечание

Ищете больше информации о том, как писать шаблоны Blade? Ознакомьтесь с полной документацией Blade для начала работы.

#Написание представлений на React / Vue

Вместо написания шаблонов фронтенда на PHP с помощью Blade многие разработчики предпочитают использовать React или Vue. Laravel упрощает этот процесс благодаря Inertia — библиотеке, которая позволяет легко связать ваш React / Vue фронтенд с Laravel-бэкендом без типичных сложностей создания SPA.

Наши стартовые наборы Breeze и Jetstream предоставляют отличную отправную точку для вашего следующего Laravel-приложения с поддержкой Inertia. Кроме того, Laravel Bootcamp предлагает полный пример создания Laravel-приложения с Inertia, включая примеры на Vue и React.

#Создание и отображение представлений

Вы можете создать представление, поместив файл с расширением .blade.php в каталог resources/views вашего приложения или используя Artisan-команду make:view:

php artisan make:view greeting

Расширение .blade.php сообщает фреймворку, что файл содержит шаблон Blade. Шаблоны Blade содержат HTML, а также директивы Blade, которые позволяют легко выводить значения, создавать условные конструкции, итерировать данные и многое другое.

После создания представления вы можете вернуть его из маршрута или контроллера вашего приложения с помощью глобального помощника view:

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

Представления также могут быть возвращены с использованием фасада View:

use Illuminate\Support\Facades\View;

return View::make('greeting', ['name' => 'James']);

Как видите, первый аргумент, передаваемый помощнику view, соответствует имени файла представления в каталоге resources/views. Второй аргумент — это массив данных, которые должны быть доступны в представлении. В данном случае мы передаём переменную name, которая отображается в представлении с помощью синтаксиса Blade.

#Вложенные каталоги представлений

Представления могут находиться во вложенных подкаталогах каталога resources/views. Для обращения к вложенным представлениям можно использовать "точечную" нотацию. Например, если ваше представление хранится в resources/views/admin/profile.blade.php, вы можете вернуть его из маршрута или контроллера так:

return view('admin.profile', $data);
Внимание

Имена каталогов представлений не должны содержать символ ..

#Создание первого доступного представления

С помощью метода first фасада View вы можете вернуть первое существующее представление из массива представлений. Это полезно, если ваше приложение или пакет позволяют настраивать или переопределять представления:

use Illuminate\Support\Facades\View;

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

#Проверка существования представления

Если нужно проверить, существует ли представление, можно использовать фасад View. Метод exists вернёт true, если представление существует:

use Illuminate\Support\Facades\View;

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

#Передача данных в представления

Как вы видели в предыдущих примерах, вы можете передавать массив данных в представления, чтобы сделать эти данные доступными в них:

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

При передаче данных таким образом массив должен содержать пары ключ / значение. После передачи данных в представление вы можете получить доступ к каждому значению внутри представления, используя ключи данных, например <?php echo $name; ?>.

Вместо передачи полного массива данных в помощник view вы можете использовать метод with для добавления отдельных элементов данных в представление. Метод with возвращает экземпляр объекта представления, что позволяет продолжать цепочку вызовов перед возвратом представления:

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

#Общий доступ к данным во всех представлениях

Иногда нужно предоставить данные всем представлениям, которые рендерит ваше приложение. Это можно сделать с помощью метода share фасада View. Обычно вызовы метода share размещают в методе boot сервис-провайдера. Вы можете добавить их в класс App\Providers\AppServiceProvider или создать отдельный сервис-провайдер для этой цели:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Регистрация сервисов приложения.
     */
    public function register(): void
    {
        // ...
    }

    /**
     * Загрузка сервисов приложения.
     */
    public function boot(): void
    {
        View::share('key', 'value');
    }
}

#Композиторы представлений

View composers — это обратные вызовы или методы классов, которые вызываются при рендеринге представления. Если у вас есть данные, которые должны быть связаны с представлением каждый раз при его рендеринге, view composer поможет организовать эту логику в одном месте. View composers особенно полезны, если одно и то же представление возвращается из нескольких маршрутов или контроллеров и всегда требует определённого набора данных.

Обычно view composers регистрируются в одном из сервис-провайдеров вашего приложения. В этом примере предположим, что мы создали новый App\Providers\ViewServiceProvider для этой логики.

Мы используем метод composer фасада View для регистрации view composer. Laravel не включает стандартный каталог для классов view composers, поэтому вы можете организовать их как угодно. Например, можно создать каталог app/View/Composers для всех view composers приложения:

<?php

namespace App\Providers;

use App\View\Composers\ProfileComposer;
use Illuminate\Support\Facades;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\View;

class ViewServiceProvider extends ServiceProvider
{
    /**
     * Регистрация сервисов приложения.
     */
    public function register(): void
    {
        // ...
    }

    /**
     * Загрузка сервисов приложения.
     */
    public function boot(): void
    {
        // Использование классовых composers...
        Facades\View::composer('profile', ProfileComposer::class);

        // Использование composers на основе замыканий...
        Facades\View::composer('welcome', function (View $view) {
            // ...
        });

        Facades\View::composer('dashboard', function (View $view) {
            // ...
        });
    }
}
Внимание

Помните, если вы создаёте новый сервис-провайдер для регистрации view composers, его нужно добавить в массив providers в конфигурационном файле config/app.php.

После регистрации composer метод compose класса App\View\Composers\ProfileComposer будет вызываться каждый раз при рендеринге представления profile. Рассмотрим пример класса composer:

<?php

namespace App\View\Composers;

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

class ProfileComposer
{
    /**
     * Создать новый composer профиля.
     */
    public function __construct(
        protected UserRepository $users,
    ) {}

    /**
     * Связать данные с представлением.
     */
    public function compose(View $view): void
    {
        $view->with('count', $this->users->count());
    }
}

Как видите, все view composers разрешаются через service container, поэтому вы можете указывать любые зависимости в конструкторе composer.

#Привязка composer к нескольким представлениям

Вы можете привязать view composer сразу к нескольким представлениям, передав массив представлений в качестве первого аргумента методу composer:

use App\Views\Composers\MultiComposer;
use Illuminate\Support\Facades\View;

View::composer(
    ['profile', 'dashboard'],
    MultiComposer::class
);

Метод composer также принимает символ * как подстановочный знак, позволяя привязать composer ко всем представлениям:

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

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

#Создатели представлений

View "creators" очень похожи на view composers, но выполняются сразу после создания представления, а не перед его рендерингом. Для регистрации view creator используйте метод creator:

use App\View\Creators\ProfileCreator;
use Illuminate\Support\Facades\View;

View::creator('profile', ProfileCreator::class);

#Оптимизация представлений

По умолчанию шаблоны Blade компилируются по требованию. При выполнении запроса, который рендерит представление, Laravel проверяет, существует ли скомпилированная версия представления. Если файл существует, Laravel сравнивает дату изменения исходного шаблона и скомпилированного файла. Если скомпилированное представление отсутствует или исходное было изменено позже, Laravel перекомпилирует представление.

Компиляция представлений во время запроса может немного снизить производительность, поэтому Laravel предоставляет Artisan-команду view:cache для предварительной компиляции всех представлений, используемых вашим приложением. Для повышения производительности рекомендуется запускать эту команду в процессе деплоя:

php artisan view:cache

Вы можете использовать команду view:clear для очистки кэша представлений:

php artisan view:clear