} } if (empty($params[0])) { $params[0] = 'article'; } $action = isset($params[1]) ? $params[1] : 'index'; switch ($params[0]) { case 'article': $controller = new \App\Controllers\Article(); break; case 'admin': $controller = new \App\Controllers\Admin(); break; default: $controller = new \App\Controllers\Error(); $action = 'error404'; Logger::instance()->save('Ошибка 404: Введен не существующий адресс'); } try { $controller->action($action); exit; } catch (\App\Exception\DB $e) { $action = 'DBError'; \App\Mailer::instance()->send('Ошибка подключения к БД'); } catch (\App\Exception\Error404 $e) { $action = 'error404'; } finally { $controller = new \App\Controllers\Error(); $controller->action($action); Logger::instance()->save($e->getMessage()); }
<?php require __DIR__ . '/../autoload.php'; // При наличии одного поля в URI оно рассматривается как имя действия // Если их больше, то предшествующие поля рассматриваются как // имя контроллера preg_match('~^/?([\\w|/]+)?/(\\w+)/?(\\?.*)?$~', $_SERVER['REQUEST_URI'], $matches); $parsedControllerName = str_replace('/', '\\', ucwords($matches[1], '/')); $parsedActionName = ucfirst($matches[2]); $controllerName = '\\App\\Controllers\\' . ($parsedControllerName ?: 'News'); $actionName = $parsedActionName ?: 'Index'; try { PHP_Timer::start(); $controller = new $controllerName(); $controller->action($actionName); } catch (\App\Exceptions\DB $e) { switch ($e->getCode()) { case 1: \App\Logger::instance()->alert(null, ['exception' => $e]); break; case 2: \App\Logger::instance()->error(null, ['exception' => $e]); break; default: \App\Logger::instance()->error(null, ['exception' => $e]); } (new \App\View())->display('../App/Templates/Errors/Db.php', ['error' => $e->getCode()]); } catch (\App\Exceptions\NotFound $e) { \App\Logger::instance()->info(null, ['exception' => $e]); (new \App\View())->display('../App/Templates/Errors/NotFound.php', ['page' => $e->getMessage()]); }