我正在建立一个苗条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?
}
}
}
答案 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文件。