我正试图为我的数据库创建一个小型的RESTful API,我遇到了基于用户请求动态创建控制器对象的问题,因为我的所有代码都在使用名称空间并只执行:
$api = new $controllerName($request);不起作用。因为$controllerName将解析为"ReadController",但实际上是\controllers\lottery\ReadController,因此出现了错误。
定义类路径的整个部分是:
if ($method === 'GET') {
$controllerName = 'ReadController';
// @NOTE: $category is a part of $_GET parameters, e.g: /api/lottery <- lottery is a $category
$controllerFile = CONTROLLERS.$category.'/'.$controllerName.'.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
$api = new $controllerName($request);
} else {
throw new \Exception('Undefined controller');
}
}以及ReadController在core\controllers\lottery\ReadController.php中的声明
namespace controllers\lottery;
class ReadController extends \core\API {
}有什么想法吗?如何动态创建对象?
谢谢!
发布于 2013-11-03 09:43:08
$controllerName = 'controllers\lottery\ReadController';
new $controllerName($request);从字符串实例化的类必须始终使用完全限定的类名。
https://stackoverflow.com/questions/19751582
复制相似问题