Loading...
dessytomova avatar dessytomova 7 Точки

прихващане на несъществуващ клас

Здравейте, 

Имам проблем с метода 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;
    }
}

 

 

 

 

 

Тагове:
0
PHP Web Development
RoYaL avatar RoYaL Trainer 6849 Точки
Best Answer

Пробвай да сложиш още един NAMESPACE_SEPARATOR в самото начало - преди vendor name-a.

Ако не стане - може да пробваш да проверяваш дали файла съществува, вместо класа :)

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.