将 HTTP 请求路由到静态 class 方法
Routing HTTP requests to static class methods
我刚开始使用 Slim Framework 来创建我的休息 API。一切正常,直到我尝试将 HTTP 请求路由到静态 class 方法(我之前使用过匿名函数)。下面是我在 index.php
:
上的新路线代码
include "vendor/autoload.php";
$config = ['settings' => [
'addContentLengthHeader' => false,
'displayErrorDetails' => true,
'determineRouteBeforeAppMiddleware' => true
]
];
$app = new \Slim\App($config);
$app->get('/user/test', '\App\Controllers\UserController:test');
$app->run();
下面是我在 UserController.php
上的 UserController
class
class UserController{
public function test($request, $response, $args){
$array = ['message'=>'your route works well'];
return $response->withStatus(STAT_SUCCESS)
->withJson($array);
}
}
错误详情:
Type : RuntimeException
Message: Callable \Controllers\UserController does not exist
File : /var/www/html/project_api/vendor/slim/slim/Slim/CallableResolver.php
下面是我的项目文件夹树
project_api/
index.php
vendor/
slim/slim/Slim/CallableResolver.php
Controllers/
UserController.php
我的composer.json
{
"require": {
"slim/slim": "^3.8",
"sergeytsalkov/meekrodb": "*",
"slim/http-cache": "^0.3.0"
}
},
"autoload": {
"psr-4": {
"Controllers\": "Controllers/"
}
}
看来您的命名空间定义不正确。在你的composer.json
,classUserController
命名空间下Controllers
.
您应该在 UserController.php
:
的顶部定义一个名称空间
namespace Controllers;
并将 index.php
中的 $app->get()
更改为:
$app->get('/user/test', 'Controllers\UserController:test');
我刚开始使用 Slim Framework 来创建我的休息 API。一切正常,直到我尝试将 HTTP 请求路由到静态 class 方法(我之前使用过匿名函数)。下面是我在 index.php
:
include "vendor/autoload.php";
$config = ['settings' => [
'addContentLengthHeader' => false,
'displayErrorDetails' => true,
'determineRouteBeforeAppMiddleware' => true
]
];
$app = new \Slim\App($config);
$app->get('/user/test', '\App\Controllers\UserController:test');
$app->run();
下面是我在 UserController.php
UserController
class
class UserController{
public function test($request, $response, $args){
$array = ['message'=>'your route works well'];
return $response->withStatus(STAT_SUCCESS)
->withJson($array);
}
}
错误详情:
Type : RuntimeException
Message: Callable \Controllers\UserController does not exist
File : /var/www/html/project_api/vendor/slim/slim/Slim/CallableResolver.php
下面是我的项目文件夹树
project_api/
index.php
vendor/
slim/slim/Slim/CallableResolver.php
Controllers/
UserController.php
我的composer.json
{
"require": {
"slim/slim": "^3.8",
"sergeytsalkov/meekrodb": "*",
"slim/http-cache": "^0.3.0"
}
},
"autoload": {
"psr-4": {
"Controllers\": "Controllers/"
}
}
看来您的命名空间定义不正确。在你的composer.json
,classUserController
命名空间下Controllers
.
您应该在 UserController.php
:
namespace Controllers;
并将 index.php
中的 $app->get()
更改为:
$app->get('/user/test', 'Controllers\UserController:test');