Метод creator
Метод creator класса View применяется для регистрации коллбэка, который будет вызван в момент создания объекта представления. Первым параметром передаётся имя представления, вторым - замыкание или имя класса. Замыкание принимает экземпляр View, что позволяет модифицировать данные представления до его рендеринга.
Синтаксис
<?php
View::creator($view, $callback);
?>
Пример
Давайте зарегистрируем коллбэк для представления 'profile', который будет добавлять текущее время в данные представления:
<?php
namespace AppProviders;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
View::creator('profile', function ($view) {
$view->with('currentTime', now()->toDateTimeString());
});
}
}
?>
Пример
Зарегистрируем коллбэк для всех представлений в папке 'admin' с помощью звёздочки:
<?php
namespace AppProviders;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
View::creator('admin.*', function ($view) {
$view->with('adminLayout', 'default');
$view->with('adminTheme', 'dark');
});
}
}
?>
Пример
Используем класс вместо замыкания для обработки нескольких представлений:
<?php
namespace App\View\ViewCreator;
use Illuminate\Contracts\View\View;
class ProfileCreator
{
public function create(View $view): void
{
$view->with('userRole', 'admin');
$view->with('userPermissions', ['read', 'write', 'delete']);
}
}
?>
<?php
namespace AppProviders;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
use App\View\ViewCreator\ProfileCreator;
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
View::creator(['profile', 'dashboard'], ProfileCreator::class);
}
}
?>
Пример
Пример использования созданного представления с переданными данными:
<div>
<h1>User Profile</h1>
<p>Current time: {{ $currentTime ?? 'Not set' }}</p>
<p>User role: {{ $userRole ?? 'guest' }}</p>
<p>Permissions: {{ implode(', ', $userPermissions ?? []) }}</p>
</div>
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
public function show()
{
return view('profile');
}
}
?>
Результат выполнения кода:
<div>
<h1>User Profile</h1>
<p>Current time: 2026-09-08 14:30:25</p>
<p>User role: admin</p>
<p>Permissions: read, write, delete</p>
</div>