GET запрос в MVC php

460
09 мая 2017, 06:48

Делаю сайт на MVC-каркасе. .htaccess:

AddDefaultCharset utf-8
Options +FollowSymLinks
RewriteEngine on
RewriteBase /
ErrorDocument 404 /404.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php

Вот router:

class Router
{
    private $routes;
    public function __construct()
    {
        $routesPath = ROOT.'/config/routes.php';
        $this->routes = include($routesPath);
    }
// Return type
    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)) {
                // Получаем внутренний путь из внешнего согласно правилу.
                $internalRoute = preg_replace("~$uriPattern~", $path, $uri);
                $segments = explode('/', $internalRoute);
                //Находим название Controller
                $controllerName = array_shift($segments).'Controller';
                $controllerName = ucfirst($controllerName);
                //Находим название action
                $actionName = 'action'.ucfirst((array_shift($segments)));
                //Передаем в переменную $parameters оставшиеся части адресной строки
                $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;
                }
            }
        }
    }
}

Берет свои пути из routes.php:

<?php
return array(
    'admin/product/update/([0-9]+)' => 'adminProduct/update/$1',
    'admin/product/delete/([0-9]+)' => 'adminProduct/delete/$1',
    'admin/products/create' => 'adminProduct/create',
    'admin/products' => 'adminProduct/index',
    'admin' => 'admin/index',
    'login' => 'user/login',
    'product/([\w]{1,})' => 'product/view/$1',
    'category/([\w]{1,})' => 'site/category/$1',
    '([\s\S\w\W\d\D]{1,})' => 'site/error',
    '' => 'site/index/$1',
);

Вроде бы все уже готово, но возникла проблема: не работают GET-запросы. Вообще. Т.е. роутер распознает ссылку site/?utm_sourse=vk как '([\s\S\w\W\d\D]{1,})' => 'site/error', исходя из чего ни один GET-запрос не передается корректно. Вопрос - как это исправить? Видел предложение добавить в .htaccess RewriteRule ^(.*)$ index.php [QSA] но не помогло :(

READ ALSO
Вставить перевод строки в ячейке Excel

Вставить перевод строки в ячейке Excel

Пытаюсь взять значение из ячейки, вставить вместо запятых перевод строки в ячейке, вернуть обратно

491
Не работает websocket в фоне с nohup

Не работает websocket в фоне с nohup

Я использую библиотеку ratchetПри запуске без nohup websocket работает без нареканий, при запуске с nohup command & выдает

262
Заполнить массив значениями из БД для вывода в зависимый выпадающий список PHP

Заполнить массив значениями из БД для вывода в зависимый выпадающий список PHP

ЗдравствуйтеПомогите, пожалуйста, заполнить массив $city значениями из БД для вывода в зависимый выпадающий список

531
не работает переход по страницам в codeigniter 3 HMVC

не работает переход по страницам в codeigniter 3 HMVC

При загрузке проекта нормально работает главная страница, но на любой переход высвечивается эта ошибкаИспользую mac и встроенный Apache

297