2
데이터베이스 용으로 작은 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의 선언 \ 추첨 \ ReadController.php
namespace controllers\lottery;
class ReadController extends \core\API {
}
동적으로 개체를 만드는 방법에 대한 아이디어가 있습니까?
감사합니다. 문자열에서 인스턴스화
간단 ... 젠장 .. 고마워, 효과가 있었다. 10 분 안에 답을 수락합니다. – deb0rian
예, 비슷한 문제가있었습니다. 대답에 대한 유일한 개선점은 다음과 같습니다. PHP는 네임 스페이스 별칭을 해석에 대한 전체 경로로 대체하기 때문에 별칭은 opcode에서 유지되지 않으며 VM은 아무 것도 알지 못합니다. –
@Alma 너무 자세하게 설명하는 방법이라고 생각합니다. http://stackoverflow.com/a/16808358/476 – deceze