Роутинг не работает, как хотелось бы, как сделать по уму?

Я начинающий,у меня написаны роуты, но всё работает не так как хотелось бы. точнее если я пишу роут в таком роде

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;
                }
            }
           
        }
        
    }

Заранее благодарен за изъявленный интерес.


Ответы (0 шт):