Сообщение об ошибке на самом деле говорит само за себя.
Если аргумент FrontController->dispatch()
методов имеет значение true
или false
, то исключение все равно будет выдано .. (если есть какая-то магия фреймворка , пожалуйста, дайте нам знать какой фреймворк вы используете)
Поэтому убедитесь, что вы ловите исключение, когда вы его называете:
/* ... */
try {
FrontController->dispatch(false);
} catch (Exception $ex) {
echo "Eception caught: " . $ex.getMessage();
}
/* ... */
Обновление:
Здесь вы можете прочитать об исключениях в PHP и о том, как их перехватить.
О несуществующей проблеме модуля:
$regex = '/[^-_A-z0-9]+/';
$module = isset($_GET['module']) ? preg_replace($regex, '', $_GET['module']) : 'home';
$action = isset($_GET['action']) ? preg_replace($regex, '', $_GET['action']) : 'frontpage';
$class = ucfirst($module) . 'Actions';
$file = $this->pageDir . '/' . $module . '/' . $class . '.php';
if (!is_file($file)) {
throw new FrontControllerException('Page not found!');
}
IF-Statement
только проверяет, существует ли файл модуля (Pattern: ModuleActions.php) в этом случае BLAHActions.php или нет.Как только оно сгенерирует исключение, ваш вызов будет отменен, и он не будет обработан обработан .(Это означает, что он даже не будет продолжать проверять параметр Action
)
О несуществующей проблеме действия:
Насколько я понимаю из опубликованного кода, следующий метод:
public function dispatchAction($action) {
$actionMethod = 'do' . ucfirst($action);
if (!method_exists($this, $actionMethod)) {
throw new FrontControllerException('Page not found!');
}
$this->$actionMethod();
$this->displayView($action);
}
делает вызовы требуемого действия (Pattern: doSomething), в этом случае doFrontPage даже не вызывается, потому что ваш код заранее вызывает исключение.
Вызов несуществующего действия делаетне выбрасывайте необработанное исключение, потому что это handled
в вашем методе FrontController-> dispatch () сразу после проверки модуля:
try {
//Trys the setModule method in the ActionController class
$controller->setModule($module);
/* The ActionController dispatchAction method checks if the method
* exists, then runs the displayView function in the
* ActionController class.
*/
$controller->dispatchAction($action);
}
catch(Exception $error) {
/* An exception has occurred, and will be displayed if
* $throwExceptions is set to true.
*/
if($throwExceptions) {
echo $error->errorMessage($error); //Full exception echoed
} else {
echo $error->errorMessage(null); //Simple error messaged echoed
}
}