Как использовать пользовательские ключи в маршрутах laravel без ограничения? - PullRequest
2 голосов
/ 12 марта 2020

При использовании пользовательских ключей Laravel вынуждает нас определить область, например, у меня есть маршрут для получения страны и сообщения

api/countries/{country:slug}/posts/{post:slug}

, но я не могу получить это с помощью ключа slug, потому что он не имеет отношения к стране, и в этом случае я хочу сам обрабатывать область, и мне не нужно неявно привязывать область, но я получаю ошибку (вызов неопределенного метода App \ Country :: posts ()). поэтому из-за этого я не могу использовать эту функцию Laravel. Есть ли способ отключить неявно привязку области?

1 Ответ

0 голосов
/ 07 апреля 2020

Если сообщения не относятся к странам, возможно, не имеет смысла вкладывать их в URI?

Но, тем не менее, чтобы ответить на ваш вопрос, вам необходимо выполнить одно из двух действий:

  1. Вместо установки {country: slug}, просто используйте {country} и затем переопределите функцию getKeyRouteName() в своих моделях Country и Post.
  2. В качестве альтернативы, особенно если вы хотите использовать в другом месте используйте явное связывание модели.

Чтобы использовать слаг без пользовательских ключей в файле маршрутов

class Post
{
    [...]

    public function getRouteKeyName()
    {
        return 'slug';
    }
}

Чтобы использовать явную привязку модели маршрута

Добавьте следующее в метод boot () вашего RouteServiceProvider:

public function boot()
{
    parent::boot();

    Route::bind('post', function ($value) {
        return App\Post::where('slug', $value)->firstOrFail();
    });
}
...