Я, кажется, понял это.Если я переставлю маршруты с
$router->group(['prefix' => '/v1', 'middleware' => ['auth:api']], function (\Illuminate\Routing\Router $router) {
$router->apiResource('/contacts', 'ContactsController');
$router->group(['prefix' => '/contacts'], function (\Illuminate\Routing\Router $router) {
$router->apiResource('/groups', 'Contacts\\GroupsController');
});
});
до
$router->group(['prefix' => '/v1', 'middleware' => ['auth:api']], function (\Illuminate\Routing\Router $router) {
$router->group(['prefix' => '/contacts'], function (\Illuminate\Routing\Router $router) {
$router->apiResource('/groups', 'Contacts\\GroupsController');
});
$router->apiResource('/contacts', 'ContactsController');
});
, тогда это сработает.Я подозреваю, что это ошибка в том, как Laravel регистрирует свои маршруты как POST
и PUT
запросы по-прежнему работают нормально.
Я поднял это как ошибку на GitHub - https://github.com/laravel/framework/issues/26038
ОБНОВЛЕНИЕ
Теперь я определил проблему.В основном apiResource
переводит одну из конечных точек в:
/contacts/{contact}
.
Следуя этому маршруту, contacts/groups
.Однако для того, чтобы Laravel сопоставил его с contacts/groups
, он должен быть до /contacts/{contact}
, так как это подстановочный знак.Независимо от того, является ли это преднамеренным поведением, я не уверен, но в настоящий момент просто наличие маршрутов наоборот исправляет это.