#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
Комментарии:
1. Я использую laravel 7.0, существует ли это там?
2. спасибо, еще один вопрос, если бы я использовал метод resources(), который принимает массив контроллеров и префиксов, как это можно применить?
3. к сожалению, эти методы
resources
иapiResources
ничего не возвращают, поэтому вы не можете… они просто перебирают то, что вы им передаете, и в любом случае вызывают соответствующий метод, вы можете сделать это самостоятельно с помощью цикла foreach, если это необходимо… но естьoptions
массив, который вы можете передать всем этим методам, которые вы потенциально можете установить… я добавлю к ответу