Laravel 视图创建器 - 预处理数据功能

Laravel的视图创建器(View Creators)使你能够在视图实例化后立即准备数据,比视图合成器(View Composers)更早,这使得它们非常适合设置关键的视图数据或优化性能。
use Illuminate\Support\Facades\View;
// 注册视图创建器
View::creator('dashboard', DashboardCreator::class);
让我们通过一个管理动态应用程序菜单的实际示例来深入了解:
<?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)
]);
}
}
// 在你的AppServiceProvider中
public function boot()
{
View::creator('layouts.app', ApplicationMenuCreator::class);
}
// 在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>
视图创建器为你的视图提供早期数据准备,确保在视图实例化后关键数据即可使用。
Publish on 2025-01-08,Update on 2025-02-10