流明POST路线不起作用

时间:2018-07-20 16:27:52

标签: lumen

请考虑以下内容:

$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有问题。结果相同。

2 个答案:

答案 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,但是对于我的本地开发环境,这解决了这个问题。希望这对未来的读者有所帮助。