как использовать route slug внутри маршрутов ресурсов

#php #laravel

#php #laravel

Вопрос:

это обычный способ определения маршрута с блокировкой в laravel

 Route::get("/category/{category:id}/post/{post:id}","CategoryPostController@show");
  

обратите внимание, что этот маршрут фактически привязывает связь между сообщением и категорией, которая принадлежит, таким
образом, когда вы запрашиваете /category/1/post/1 и сообщение с id = 1 фактически принадлежит категории с id = 1 , сообщение будет возвращено

но если вы запросите /category/1/post/2 , что сообщение с id = 2 не является одним из сообщений, принадлежащих категории с id = 1 , результатом будет 404 Not Found

теперь, используя маршруты ресурсов, я фактически не смог этого сделать

например ,

 Route:apiResource("category.post","CategoryPostController");
  

этот метод отображает маршруты для работы как с ресурсами категории, так и с post, одним из которых является маршрут выше /category/{category}/post/{post}

но без slug .. , так как я могу реализовать это внутри метода без жесткого кодирования всех маршрутов с нуля, таким образом, используя преимущества маршрутов ресурсов.

Комментарии:

1. Добро пожаловать в SO… какую версию Laravel вы используете? и что такое «slug», вы используете только ‘id здесь

Ответ №1:

scoped Для объекта есть метод PendingResourceRegistration , который возвращается из Route::resource ( apiResource вызывается resource ):

 Route:apiResource('category.post', 'CategoryPostController')->scoped();
  

Если вам нужно переопределить используемый ключ маршрута, вы также можете это сделать:

 ...->scoped(['post' => 'slug']);
  

Если вы хотите использовать apiResources or resources , которые ничего не возвращают, вы можете передать им массив «options» для установки этой информации:

 Route::apiResources([...], ['bindingFields' => []]);
// should be like adding `scoped` to each of them
  

Документы Laravel 7.x — Контроллеры — Контроллеры ресурсов — Определение области действия маршрутов ресурсов scoped

Комментарии:

1. Я использую laravel 7.0, существует ли это там?

2. спасибо, еще один вопрос, если бы я использовал метод resources(), который принимает массив контроллеров и префиксов, как это можно применить?

3. к сожалению, эти методы resources и apiResources ничего не возвращают, поэтому вы не можете… они просто перебирают то, что вы им передаете, и в любом случае вызывают соответствующий метод, вы можете сделать это самостоятельно с помощью цикла foreach, если это необходимо… но есть options массив, который вы можете передать всем этим методам, которые вы потенциально можете установить… я добавлю к ответу