Laravel Filament:替换/{record}/edit路由中的record参数方法
自定义Filament资源路由的记录标识字段
要替换getPages()中默认的{record}占位符(默认传递ID)为自定义字段,需要分三步操作:
1. 修改路由定义
直接在getPages()方法里把{record}换成你想要的占位符名称,比如{family_slug}:
public static function getPages(): array { return [ 'index' => Pages\ListUserFamilies::route('/'), 'create' => Pages\CreateUserFamilies::route('/create'), 'edit' => Pages\EditUserFamilies::route('/{family_slug}/edit'), ]; }
2. 重写路由绑定逻辑
在你的资源类中添加resolveRouteBinding方法,告诉Filament如何通过自定义字段值找到对应的数据库记录:
public static function resolveRouteBinding($value, $field = null) { // 将`slug`替换为你实际要使用的字段名 return static::getModel()::where('slug', $value)->firstOrFail(); }
3. 调整编辑链接生成
确保列表页及其他地方的编辑按钮链接使用自定义字段值,而不是默认的ID。在资源的表格配置中自定义EditAction:
use Filament\Tables\Actions\EditAction; public static function table(Table $table): Table { return $table ->columns([ // 你的列定义 ]) ->actions([ EditAction::make() ->url(fn ($record) => static::getUrl('edit', ['family_slug' => $record->slug])), ]); }
如果还有其他场景需要生成编辑链接(比如记录详情页的按钮),同样需要用static::getUrl('edit', ['family_slug' => $record->slug])的方式生成正确的URL。
内容的提问来源于stack exchange,提问作者Delmontee
相关产品推荐
相关产品推荐

