使用Slim在组中路由REST API

时间:2017-03-07 10:53:28

标签: php rest api slim

我正在建立一个苗条3的休息api,但我在理解如何进行路由方面遇到了一些麻烦。我最初在api.com/v1/companies/get和api.com/v1/companies/get/id上正确使用get方法,并在api.com/v1/companies/post上发布方法,但我重构了所有的方法将在api.com/v1/companies/id,并且在重构之后,我在发布请求时收到405错误,说明只存在get方法。

所以我做了一些研究;我在其他超薄3指南中找到的小但不一致的数量有点烦人,但看起来我的解决方案是map()功能,只是我不知道如何使用它,甚至官方文档都跳过我不理解的部分。

这就是代码在破坏它的重构器之后的样子:

$app->group('/v1', function() use ($app) {
    $app->group('/companies', function() use ($app) {
        $app->get('/{code}', function($request, $response, $args) {...}
        $app->get('', function($request, $response, $args) {...}
        $app->post('', function($request, $response, $args) {...}
    });
});

我第一次尝试使用map():

$app->group('/v1', function() use ($app) {
    $app->map(['GET', 'POST', 'PUT', 'DELETE'], '/companies/{code}', function($request, $response, $args) use ($app) {
        //here's where I don't know what to do
        if($request->isGet()) {
            //What goes here? And I seem to be having problems accessing my parameters?
        }
     }
}

1 个答案:

答案 0 :(得分:1)

此代码适用于我:

<?php

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require '../vendor/autoload.php';

$app = new \Slim\App;

$app->group('/v1', function() {
    $this->map(['GET', 'POST', 'PUT', 'DELETE'], '/companies/{code}', function($request, $response, $args) {

        if($request->isGet()) {
            $response->getBody()->write("it's GET");
        }

        if($request->isPost()) {
            $response->getBody()->write("it's POST");
        }

        if($request->isPut()) {
            $response->getBody()->write("it's PUT");
        }

        if($request->isDelete()) {
            $response->getBody()->write("it's DELETE");
        }

        return $response;
    });
});

$app->run();

请不要在群组内使用$ app。在docs中,您可以看到$ this内部组指向&#39; Slim \ App&#39;已经。如果按照Slim3文档中的描述进行配置,请检查.htaccess文件。