Маршрутизация и красивый URL - PullRequest
2 голосов
/ 17 февраля 2020

Я пытаюсь создать более симпатичные URL-адреса, и у меня возникают проблемы при создании допустимого маршрута:

Допустим, у меня есть следующая страница http://localhost/app/account/5/edit.

Это прекрасно работает с Route :: get ('account / {account}', 'AccountController@edit');

Если я изменю Модель учетной записи и изменить getRouteKeyName на вернуть 'имя' , я могу (с тем же маршрутом сверху) получить доступ к следующей ссылке: http://localhost/app/account/randomName/edit

Дело в том, что меня интересует немного другой маршрут: http://localhost/app/account/randomName-5/edit

Если я создаю маршрут Route :: get ('/ account / {ignore} - {account} / edit ',' AccountController@edit ') , произойдет сбой, поскольку первый аргумент, отправляемый для редактирования, является строкой, а не экземпляром Account. Это можно легко исправить, изменив edit (Account $ a c) на edit ($ игнорируется, Account $ a c); ... но это похоже на обман .

Есть ли способ получить маршрут, чтобы игнорировать первый {блок}?

1 Ответ

3 голосов
/ 17 февраля 2020

В соответствии с документацией вы можете настроить логи разрешения c для привязки модели маршрута.

В этом сценарии вы можете сделать что-то подобное в App \ Providers \ RouteServiceProvider :

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    parent::boot();

    Route::bind('accountNameWithId', function ($value) {
        list($accountName, $accountId) = explode('-', $value);

        return App\Account::whereKey($accountId)
            ->where('name', $accountName)
            ->firstOrFail();
    });
}

Затем вы можете переопределить свой маршрут следующим образом:

Route::get('account/{accountNameWithId}', 'AccountController@edit');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...