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