прихващане на несъществуващ клас
Здравейте,
Имам проблем с метода 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; } }