У меня есть PostResource в моем приложении накаливания.
Постмодальная схема
Posts
- id
- title
- slug
- description
- created_by
- status
Теперь, когда я создаю новый пост, он перенаправляется на страницу редактирования и доступ к URL-адресу, например http://127.0.0.1"8000/posts/1/edit.
но можем ли мы добавить слаг в URL?
Исключенный URL: http://127.0.0.1"8000/posts/<SLUG>/edit
В моих PostResource маршрутах
public static function getPages(): array
{
return [
'index' => Pages\ListPosts::route('/'),
'create' => Pages\CreatePost::route('/create'),
// here, it binding route model, I want to change with slug
'edit' => Pages\EditPost::route('/{record}/edit'),
];
}
@SiZE, я знаю, как мы можем установить слаг на маршруте, но это ВЫСОКАЯ нить стека. и я пытаюсь реализовать в Filament, который по умолчанию работает с привязкой модели маршрута
@SiZE это вопрос о нити, а не о ядре Laravel.
@KhyatiBhojawala В ядре Laravel есть функции, которые Filament с радостью использует. В этом случае вы хотите изучить getRouteKey и getRouteKeyName для своих моделей Eloquent, а не каждый раз вручную url().
@ceejayoz, спасибо за руководство; не могли бы вы поделиться каким-либо примером того же самого?






Вы должны прочитать основную документацию Laravel
Вы должны прочитать рекомендации StackOverflow.
Это просто, что ли...
В свой PostResource нужно добавить ->url() и в качестве параметра маршрута добавить $record->slug.
Tables\Actions\EditAction::make()
->url(fn (Model $record): string => static::getUrl('edit', ['record' => $record->slug])),
Если вы измените слаг в интерактивном tr, вам нужно изменить его в своем классе List и переопределить функцию getTableRecordUrlUsing().
PlanResource > Pages > ListPlans
use Closure;
class ListPlans extends ListRecords
{
// ...
protected function getTableRecordUrlUsing(): ?Closure
{
return function (Model $record): ?string {
foreach (['view', 'edit'] as $action) {
$action = $this->getCachedTableAction($action);
if (! $action) {
continue;
}
$action->record($record);
if ($action->isHidden()) {
continue;
}
$url = $action->getUrl();
if (! $url) {
continue;
}
return $url;
}
$resource = static::getResource();
foreach (['view', 'edit'] as $action) {
if (! $resource::hasPage($action)) {
continue;
}
if (! $resource::{'can' . ucfirst($action)}($record)) {
continue;
}
// here you need to add slug
return $resource::getUrl($action, ['record' => $record->slug]);
}
return null;
};
}
}
Вы должны прочитать основную документацию Laravel