Привет.
routes.php -
<?php
return array(
'news/([0-9]+)' => 'news/view/$1',
'news' => 'news/index',
);
private function getURI()
{
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}
public function run()
{
$uri = $this->getURI();
foreach ($this->routes as $uriPattern => $path) {
if(preg_match("~$uriPattern~", $uri)) {
/* echo "<br>Где ищем (запрос, который набрал пользователь): ".$uri;
echo "<br>Что ищем (совпадение из правила): ".$uriPattern;
echo "<br>Кто обрабатывает: ".$path; */
// Получаем внутренний путь из внешнего согласно правилу.
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
/* echo '<br>Нужно сформулировать: '.$internalRoute.'<br>'; */
$segments = explode('/', $internalRoute);
$controllerName = array_shift($segments).'Controller';
$controllerName = ucfirst($controllerName);
$actionName = 'action'.ucfirst(array_shift($segments));
$parameters = $segments;
$controllerFile = ROOT . '/controllers/' .$controllerName. '.php';
if (file_exists($controllerFile)) {
include_once($controllerFile);
}
$controllerObject = new $controllerName;
$result = call_user_func_array(array($controllerObject, $actionName), $parameters);
if ($result != null) {
break;
}
}
}
Если поставлю else после if(preg_match("~$uriPattern~", $uri)), то ошибку будет выводить при совпадении, а без совпадения два раза.
Или лучше по другому это сделать?