Коллеги! Как сделать проверку в файле Router.php - чтобы когда при заходе на любую неправильную ссылку вместо белого экрана была 404 ошибка. На данный момент из-за роута типа 'category/([-a-z]+)' => 'catalog/category/$1', при вводе любой неправильной ссылки типа site/category/errorlinkkk - выводит категорию без нужных значений. Нужно чтобы срабатывала 404 ошибка. Код учебный, реализую для своего проекта и тренируюсь. С уважением, Александр!
Файл Router.phpclass Router {
private $routes; //массив, в котором будут храниться роуты
public function __construct() {
$routesPath = ROOT.'/config/routes.php'; //путь к роутам
$this->routes = include($routesPath);
}
private function getURI() {
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
public function run() {
//Получить строку запроса
$uri = $this->getUri();
//Проверка наличие такого запроса в routes.php
foreach($this->routes as $uriPattern => $path) {
//Сравниваем $uriPattern и $uri
if (preg_match("~^$uriPattern$~", $uri)) {
//Получаем внутренний путь из внешнего согласно правилу
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
//Определить какой контроллер и метод обрабатывает запрос
$segments = explode('/', $internalRoute);
//Получить имя контроллера
$controllerName = ucfirst(array_shift($segments)).'Controller';
//Получить имя метода
$actionName = 'action'.ucfirst(array_shift($segments));
//Подключить файл класса контроллера
$controllerFile = ROOT . '/controllers/' . $controllerName . '.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
//Создать объект, вызвать метод
$parameters = $segments;
$controllerObject = new $controllerName;
$result = call_user_func_array(array($controllerObject, $actionName), $parameters);
if($result != null) {
break;
}
}
}
}
}
Часть кода из routes.phpreturn array(
// Товар:
'product/([-a-z]+)' => 'product/view/$1', // actionView в ProductController
// Каталог:
'catalog' => 'catalog/index', // actionIndex в CatalogController
// Категория товаров:
'([0-9]+)/page-([0-9]+)' => 'catalog/category/$1/$2', // actionCategory в CatalogController
'category/([-a-z]+)' => 'catalog/category/$1', // actionCategory в CatalogController
);