У меня есть структура MVC в моем php.PHP - Предотвращение ошибки автозагрузчика
Я использую автозагрузку для инициализации правильного контроллера.
Вот очень упрощенная вниз версия моего index.php:
<?php
spl_autoload_extensions('.class.php');
spl_autoload_register();
$controller = strtolower($_GET["controller"]);
$action = strtolower($_GET["action"]);
$obj = new $controller();
$obj->{$action}();
Так скажем, пользователь загружает www.example.com/Page/View
. Apache перепишет его на www.example.com?controller=Page&action=View
. Затем, когда php вызывает $obj = new $controller();
, он попытается найти page.class.php
в том же каталоге, что и файл (очевидно, что в моем приложении структура файла не такая тривиальная, с пространствами имен и т. Д.), А затем загрузите класс Page
внутри и выполнить Page->View();
.
Теперь скажите, что пользователь делает опечатку и пытается загрузить www.example.com/Pagr/View
. В идеале, он должен получить ответ заголовка 404. Но с текущей реализацией php просто выбросит Fatal error
, когда он не сможет загрузить автозагрузку pagr.class.php
.
Как предотвратить эту ошибку? Я провел некоторое исследование, и я не могу найти способ проверить, может ли класс быть загружен автоматически или нет до вызова new
.
Как насчет использования блока try-catch? try { $ obj = new $ controller(); } catch (ExceptionThrownOnNotClassFound) { // создать 404 ответ } – Warzyw
Не удается обнаружить фатальную ошибку. – Nikita240
Я просто пытаюсь угадать здесь. Возможно, проверка того, существует ли класс $ obj с классом_exists, может помочь вам – FranMercaes