прихващане на несъществуващ клас
Здравейте,
Имам проблем с метода start() (Core\Application\Application.php), в нашия framework.
Ако класа не съществува, връща фатална грешка:
| ( ! ) Fatal error: require_once(): Failed opening required 'Controllers\UserssController.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\php_course\game\index.php on line 9 |
|---|
Опитах да добавя проверка, но резултата е същия, предполагам заради autoloader-a
if(!class_exists($controllerFullQualifiedName)){
header("Location: /php_course/game/errors/404.html");
exit;
}
Ако го изключа, както препoръчват в документацията, дори и класа да съществува, връща false.
if(!class_exists($controllerFullQualifiedName,false)){
header("Location: /php_course/game/errors/404.html");
exit;
}
var_dump(class_exists($controllerFullQualifiedName,false)); на съществуваш клас => false.
Някой може ли да помогне?
Това е кода в момента:
public function start()
{
$controllerName = $this->mvcContext->getController();
$controllerFullQualifiedName =
self::VENDOR_NAMESPACE
. self::NAMESPACE_SEPARATOR
. self::CONTROLLERS_NAMESPACE
. self::NAMESPACE_SEPARATOR
. ucfirst($controllerName)
. self::CONTROLLERS_SUFFIX;
$actionName = $this->mvcContext->getAction(); // loginPost
$args = $this->mvcContext->getArguments(); // []
if(!class_exists($controllerFullQualifiedName)){
header("Location: /php_course/game/errors/404.html");
exit;
}
try{
$refMethod = new \ReflectionMethod(
$controllerFullQualifiedName,
$actionName
);
}catch (\ReflectionException $exception){
header("Location: /php_course/game/errors/404.html");
exit;
}
$parameters = $refMethod->getParameters();
foreach ($parameters as $parameter) {
$parameterClass = $parameter->getClass();
if ($parameterClass !== null) {
$className = $parameterClass->getName();
if (!$parameterClass->isInterface()) {
$instance = $this->mapForm($_POST, $parameterClass);
} else {
$instance = $this->resolve($this->dependencies[$className]);
}
$args[] = $instance;
}
}
if (class_exists($controllerFullQualifiedName)) {
$controller = $this->resolve($controllerFullQualifiedName);
if(call_user_func_array(
[
$controller,
$actionName
],
$args
)=== false){
// non- existing action
header("Location: /php_course/game/errors/404.html");
exit;
}
}else{
//non-existing class, izvikvame statis4na strania primernp
header("Location: /php_course/game/errors/404.html");
exit;
}
}