请考虑以下内容:
$router->group([
'prefix' => 'api/v1/group',
'middleware' => 'auth'
], function () use ($router) {
$router->get('/', [
'as' => 'group.list',
'uses' => 'Api\V1\GroupController@list'
]);
$router->post('/', [
'as' => 'group.create',
'uses' =>'Api\V1\GroupController@create'
]);
$router->get('/{groupUUID}', [
'as' => 'group.retrieve',
'uses' =>'Api\V1\GroupController@retrieve'
]);
$router->put('/{groupUUID}', [
'as' => 'group.update',
'uses' => 'Api\V1\GroupController@update'
]);
});
如您所见,这是一个非常典型的路由设置。但是,我看到一些异常的行为-简而言之,POST
路由似乎被应用程序解释为GET
路由。当我通过邮递员向POST
发送api/v1/group
请求时,没有看到Api\V1\GroupController@create
的结果,但是看到了Api\V1\GroupController@list
的结果。
我想知道这是否可能与两条具有相同端点的路线有关(没关系,但在流明中可能有所不同吗?我通常在Laravel上工作)。因此,我注释了get
路线。那使我只看到404。
然后我想知道整个路线组是否被某种破坏。所以我做了两个共同点:
$router->get('/{any:.*}', function () use ($router) {
return 'I am a get route';
});
$router->post('/{any:.*}', function () use ($router) {
return 'I am a post route';
});
并将它们放在路由文件的顶部,并注释掉所有其他路由。不管我打的路线或使用的方法如何,我总会看到同一件事:I am a get route
。
这是怎么回事?是什么导致我的应用将所有POST
请求理解为GET
请求?
PS:值得注意的是,直到最近,这些路由一直有效,没有任何实际的关联更改。造成这种情况的Lumen软件包中是否已更新某些内容?
PPS:我还尝试使用Insomnia代替Postman,以防万一Postman有问题。结果相同。
答案 0 :(得分:0)
$router->get('/api/item/{table}/{id}', "ItemController@itemHandler");
$router->post('/api/item/{table}', "ItemController@itemHandler");
$router->put('/api/item/{table}/{id}', "ItemController@itemHandler");
$router->delete('/api/item/{table}/{id}', "ItemController@itemHandler");
答案 1 :(得分:0)
我遇到了几乎相同的问题。就我而言 - 由于我使用 Laravel Valet 作为开发环境 - 在通过执行 valet unsecure my-project
通过 HTTP 在本地提供 API 后,我能够再次发出 POST 请求。在我的生产服务器上,我仍然可以使用 HTTPS,但是对于我的本地开发环境,这解决了这个问题。希望这对未来的读者有所帮助。