Early View Data Preparation with Laravel View Creators
Last updated on by Harris Raftopoulos
Laravel's View Creators allow you to prepare data immediately after view instantiation, earlier than View Composers, making them perfect for setting up essential view data or optimizing performance.
use Illuminate\Support\Facades\View;// Registering a View CreatorView::creator('dashboard', DashboardCreator::class);
Let's explore a practical example of managing a dynamic application menu:
<?php namespace App\View\Creators; use App\Services\MenuService;use Illuminate\View\View;use Illuminate\Support\Facades\Auth; class ApplicationMenuCreator{ protected $menuService; public function __construct(MenuService $menuService) { $this->menuService = $menuService; } public function create(View $view) { $user = Auth::user(); $view->with([ 'mainMenu' => $this->menuService->getMainMenu($user), 'quickActions' => $this->menuService->getQuickActions($user), 'recentItems' => $this->menuService->getRecentItems($user), 'notifications' => $this->menuService->getPendingNotifications($user) ]); }} // In your AppServiceProviderpublic function boot(){ View::creator('layouts.app', ApplicationMenuCreator::class);} // Usage in layouts/app.blade.php<div class="sidebar"> <nav> @foreach($mainMenu as $menuItem) <a href="{{ $menuItem['url'] }}" class="{{ $menuItem['active'] ? 'active' : '' }}"> {{ $menuItem['label'] }} </a> @endforeach </nav> @if(count($quickActions)) <div class="quick-actions"> @foreach($quickActions as $action) <button onclick="handleAction('{{ $action['id'] }}')"> {{ $action['label'] }} </button> @endforeach </div> @endif</div>
View Creators provide early data preparation for your views, ensuring critical data is available as soon as the view is instantiated.