spl автозагрузка игнорировать класс, который не существует

У меня есть простое приложение MVC в php, которое отображает первую строку запроса на имя контроллера, второй на действие и многое другое в качестве параметров. При автозагрузке классов он ищет соглашения об именах с регулярным выражением, что нормально, но он не загружает классы, которые явно существуют.

spl_autoload_register(function ($class) {
if (preg_match('/[a-zA-Z]+Controller$/', $classname)) {
if (class_exists(__DIR__ . '/controllers/' . $classname)) {
//never gets to here, even though the file gets
//included by the require statement below
}
require __DIR__ . '/controllers/' . $classname . '.php';
return true;
}
});

//controller and action are "default" and "index" by default
//If a query string is passed, it gets the parts
$controller = $url[0];
$action = $url[1];

$controller_name = ucfirst($controller) . "Controller";
$action_name = $action . "Action";

if (class_exists($controller_name)) {
$controller_object = new $controller_name($request, $config);
$controller_object->$action_name();
} else {
echo "Class doesn't exist : $controller_name";
}

Пример вывода:

url.com/ = Класс не существует «DefaultController»

url.com/default = Класс не существует «DefaultController»

url.com/test = Класс не существует «TestController»

DefaultController существует в каталоге контроллеров.

0

Решение

Ваше условие звонки class_exists() функция, вы хотели проверить файл:

spl_autoload_register(function ($class) {
if (preg_match('/[a-zA-Z]+Controller$/', $classname)) {
if (file_exists(__DIR__ . '/controllers/' . $classname)) {
require __DIR__ . '/controllers/' . $classname . '.php';
return true;
}
}
});
0

Другие решения

Попробуй это:

try {
$controller_object = new $controller_name($request, $config);
$controller_object->$action_name();
} catch (Exception $e) {
echo "Class doesn't exist : $controller_name";
}
0

По вопросам рекламы [email protected]