Роутинг не работает, как хотелось бы, как сделать по уму?
Я начинающий,у меня написаны роуты, но всё работает не так как хотелось бы. точнее если я пишу роут в таком роде
return array('add-product'=>'products/add','products' => 'products/index');
редирект работает,но если я оставляю пуcтую строку,как ниже,то он тоже работает,но если я ввожу в URI что-то,что абсолютно не совпадает с ключём из массива,редирект не работает и он начинает обрабатывать эту муть.
Вот .htaccess
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php [QSA,L]
Задача такова,чтобы при переходе по хост имени вызывался экшн и все остальные запросы делали редирект на основную страницу,за исключением запросов совпадающих с роутами.
Есть конфиг с роутами возвращающий массив роутов
return array('add-product'=>'products/add','' => 'products/index');
И есть вот такой метод,который проверяет не пустой ли URI и возвращает его ,чтобы дальше использовать в следующем методе
public function getURI(){
if(!empty($_SERVER['REQUEST_URI'])){
return trim($_SERVER['REQUEST_URI'],'/');
}
}
Потом это всё разбивается вычисляются контроллеры и экшены, после чего они вызываются.
public function connectFile($controllerName){
$fileOfController = ROOT.'/controllers/'.$controllerName.'.php';
if(file_exists($fileOfController)){
include_once $fileOfController;
}
}
public function createAndCallInstanceWithoutParams($controllerName,$actionName){
$instanceOfController = new $controllerName;
$instanceOfController ->$actionName();
if($instanceOfController != null){
return true;
}
}
public function createAndCallInstanceWithParams($controllerName,$actionName,$parametrs){
$instanceOfController = new $controllerName;
call_user_func_array(array($instanceOfController,$actionName),$parametrs);
if($instanceOfController != null){
return true;
}
}
public function run(){
$uri = $this->getURI();
foreach ($this->routes as $uriPattern => $path){
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));
$parametrs = $segments;
$fileConnection = $this ->connectFile($controllerName);
$instanceStatus = 0;
if(empty($parametrs)){
$this->createAndCallInstanceWithoutParams($controllerName, $actionName);
$instanceStatus++;
}else{
$this->createAndCallInstanceWithParams($controllerName, $actionName, $parametrs);
$instanceStatus++;
}
if($instanceStatus == 1){
break;
}
}
}
}
Заранее благодарен за изъявленный интерес.