私は単純な MVC フレームワークに取り組んでおり、クラスの自動読み込みを使用していますclass_eixists()
。URI から解析されたコントローラー名が実際に存在するかどうかを確認し、適切に応答するために使用したいと考えています。私はから始めました
$controller = "\\namespace\\controller";
if(class_exists($controller))
$this->controllerObject = new $controller();
else
// react appropriately
クラスが存在しない場合、これにより、キャッチされていないロジック例外がスローされました。私の google-fu が私を失敗させなかった場合、これはオートローディングとclass_exists()
関数を使用するときの通常のイベントです。私は大したことはないと考えて、それをtry catchでラップしましたが、まだキャッチされていない例外が発生しており、何が間違っているのかわかりません。
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