Laravel Filament 3自定义Dashboard页面无法传递视图参数问题
解决Filament 3自定义Dashboard向Blade视图传参问题
在Filament 3中,自定义Page类的静态view()方法不会被框架自动调用,所以无法通过这种方式传递数据。正确的做法是使用Filament内置的getViewData()方法来向视图传递变量。
修改Dashboard页面类代码
移除自定义的静态view()方法,替换为getViewData()方法:
<?php namespace App\Filament\Pages; use App\Filament\Widgets\StatsOverview; use Filament\Pages\Page; use Illuminate\Support\Facades\Log; class Dashboard extends Page { protected static ?string $navigationIcon = 'heroicon-o-home'; protected static string $view = 'filament.pages.dashboard'; protected function getHeaderWidgets(): array { return [ StatsOverview::class, ]; } // 框架会自动调用这个方法获取视图数据 protected function getViewData(): array { $user = auth()->user(); Log::info("Hello Earth"); // 修正原代码的Log方法名错误 return [ 'user' => $user, // 可在此添加其他需要传递的数据,比如: // 'recentActivities' => Auth::user()->activities()->latest()->take(10)->get() ]; } }
Blade视图保持不变
你的原视图代码无需修改,现在$user变量已能正常访问:
<x-filament-panels::page> Hello {{ $user->name }} </x-filament-panels::page>
补充说明
- Filament的Page类通过内置的
render()方法渲染视图,会自动读取$view属性指定的视图文件,并将getViewData()返回的数组作为变量传递给视图。 - 如果是静态数据,也可以直接在Page类中定义公共属性,框架会自动将这些属性传递到视图中,例如:
视图中直接使用public string $pageTitle = '我的仪表盘';{{ $pageTitle }}即可。
内容的提问来源于stack exchange,提问作者Rafat Rashid Rahi
相关产品推荐
相关产品推荐

