Как Zend анализирует URL во фронт-контроллере, использующем mod_rewrite? - PullRequest
3 голосов
/ 14 ноября 2011

Я не могу понять, как Zend Framework контролирует маршруты.Я на самом деле пытаюсь создать свой собственный класс контроллера / маршрута, написал тот же код, который Zend рекомендует для .htaccess переписать в index.php, расположенный в корне сайта:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Строка Iне понимаю, это последнийУ него нет групп захвата и переменных $.В index.php я не могу ничего поймать в $ _GET, который пуст.Единственный способ, которым это будет работать, будет:

RewriteRule ^(.*)$ index.php?uri=$1 [NC,L]

и затем синтаксический анализ $ _GET ['uri'], который для меня будет в виде "controller / action / param1 / param1value".*

Но было бы неплохо обойти это и не использовать переменную 'uri'.В проекте Zend это просто работает.Может кто-нибудь объяснить мне, как Zend анализирует URL с таким переписыванием?

1 Ответ

4 голосов
/ 14 ноября 2011

Последнее правило перенаправляет все запросы, где файл на самом деле не существует (см. Предыдущее правило), в index.php, который загружает Zend Framework и обрабатывает запрос.Если вы проследите, что Zend делает с ним, вы в конце концов обнаружите, что вы получаете доступ к Controller / Request / Http.php через Front Controller, который использует несколько переменных $_SERVER, чтобы определить, для чего был сделан запрос.

Я бы порекомендовал написать свой index.php и проверить элементы в $_SERVER и просмотреть код в Controller / Request / Http.php.

    print_r($_SERVER);
...