Добавить slug в нить URL Laravel

У меня есть 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'),
    ];
}

Вы должны прочитать основную документацию Laravel

SiZE 27.06.2023 09:41

@SiZE, я знаю, как мы можем установить слаг на маршруте, но это ВЫСОКАЯ нить стека. и я пытаюсь реализовать в Filament, который по умолчанию работает с привязкой модели маршрута

Mitesh Rathod 27.06.2023 10:57

@SiZE это вопрос о нити, а не о ядре Laravel.

Khyati Bhojawala 27.06.2023 11:00

@KhyatiBhojawala В ядре Laravel есть функции, которые Filament с радостью использует. В этом случае вы хотите изучить getRouteKey и getRouteKeyName для своих моделей Eloquent, а не каждый раз вручную url().

ceejayoz 27.06.2023 13:53

@ceejayoz, спасибо за руководство; не могли бы вы поделиться каким-либо примером того же самого?

Khyati Bhojawala 28.06.2023 07:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
3
5
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы должны прочитать основную документацию Laravel

Вы должны прочитать рекомендации StackOverflow.

ceejayoz 27.06.2023 13:50
Ответ принят как подходящий

Это просто, что ли...

В свой PostResource нужно добавить ->url() и в качестве параметра маршрута добавить $record->slug.


Tables\Actions\EditAction::make()
    ->url(fn (Model $record): string => static::getUrl('edit', ['record' => $record->slug])),


Обновлено - 28-06-2023


Если вы измените слаг в интерактивном 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;
        };
    }
}

Другие вопросы по теме