Я работаю над простой инфраструктурой MVC, и я использую автозагрузку классов, и я хочу использовать class_eixists()
, чтобы проверить, существует ли имя контроллера, проанализированное из URI, и реагировать соответствующим образом. Я начал сИсключение уязвимости
$controller = "\\namespace\\controller";
if(class_exists($controller))
$this->controllerObject = new $controller();
else
// react appropriately
Это закончило тем, что выбрасывало исключение неперехваченной логики, если класс не существовал. Если мой google-fu не подвел меня, это обычное событие при использовании автозагрузки и функции class_exists()
. Я не понял ничего сложного и завернул в попытку поймать, но я все еще получаю неперехваченное исключение, и я не вижу, что я делаю неправильно.
try {
if (class_exists($controller)) {
$this->controllerObject = new $controller(array_slice($parsedURI, 1));
echo "controller is $controller<br />";
}
} catch (LogicException $e) {
$e->getMessage();
} catch (Exception $e) {
$e->getMessage();
}
Выход ошибки ниже. Строкой 57 является линия с (if (class_exists($controller))
). Я изменил фактические пути вручную, потому что системный администратор параноик о том, что внутренняя информация становится общедоступной.
Fatal error: Uncaught exception 'LogicException' with message 'Class
Controller\Gibberish could not be loaded' in some/path/private/webroot/assets/route.php:57 Stack trace: #0 [internal function]:
spl_autoload('Controller\Gibb...') #1
some/path/private/app/webroot/assets/route.php(57): class_exists('\Controller\Gib...')
#2 some/path/private/app/webroot/index.php(32): Assets\Route-
>__construct('/add/webroot/...') #3 {main} thrown in
some/path/private/app/webroot/assets/route.php on line 57
Что такое точное сообщение об ошибке? Здесь нет ничего исключающего *. Конечно, вы не просто получаете * Fatal Errors *? – deceze
class_exists выкинет исключение –
Я знаю, что это порождает исключение, проблема в том, что мой try/catch не поймал его. – Matt