自定义 Filament 根目录 ——避免 'Route [filament.admin.auth.login] not defined' 报错
要在 Laravel 中创建后台管理面板,Filament 将帮你大大节省很多时间。在构建 CRUD 风格的后台应用时,它提供了许多样板文件。通常情况下,Filament 将在 admin 区域(/admin
等)中运行,而主应用则在域根目录上运行。但是,如果你想让整个应用作为 Filament 应用,并在应用根目录中运行呢?
更新 Filament 使之在域名根目录中运行
通常情况下,Filament 默认在 /admin
上运行。要对此进行修改很简单。跳转到 Filament 面板配置中如 App/Providers/Filament/AdminPanelProvider.php
)并修改 path()
值:
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('admin')
// Change from 'admin' to '' to run on the root
->path('')
->login()
...
保存文件并重载应用,你应该可以看见原本在 /admin
上的功能现在在应用根目录上了。
路由错误
在 Laravel 的最新版本上这样做的一个障碍是,你很快就会在身份验证方面遇到错误。
Route [filament.admin.auth.login] not defined
当运行 php artisan route:list
,你将看到一些 Filament 相关的 URL,不过 login
看起来很短。
...
GET|HEAD login ............................................................................................. login
POST logout .................................... filament.admin.auth.logout › Filament\Http › LogoutController
GET|HEAD users ........ filament.admin.resources.users.index › App\Filament\Resources\UserResource\Pages\ListUsers
GET|HEAD users/create filament.admin.resources.users.create › App\Filament\Resources\UserResource\Pages\CreateUser
...
原因是 Laravel 的默认认证和我们现在试图用 Filament 做的事情之间存在冲突。要解决这个问题,请转到 routes/web.php
,并删除带有 ->name('login')
的路由。
Route::middleware('guest')->group(function () {
// This is the one to get rid of!
Volt::route('login', 'pages.auth.login')
->name('login');
删除此路由后,冲突消失了,Filament 可以处理登录了。再次生成路由列表确认登录现在是通过 Filament 进行处理:
...
GET|HEAD login ................................................ filament.admin.auth.login › Filament\Pages › Login
POST logout .................................... filament.admin.auth.logout › Filament\Http › LogoutController
GET|HEAD users ........ filament.admin.resources.users.index › App\Filament\Resources\UserResource\Pages\ListUsers
GET|HEAD users/create filament.admin.resources.users.create › App\Filament\Resources\UserResource\Pages\CreateUser
...
这是一个极其简单的修复,它允许你将 Filament 从 /admin
移动到域名根目录,而不会出现其他问题!