скрыть имя контроллера в URL в Zend Framework - PullRequest
0 голосов
/ 09 июля 2011

У меня есть следующая проблема с сайтом, построенным на Zend, которую я не могу исправить: Сайт, который я редактирую (не кодированный мной), имеет следующую структуру ссылок: http://www.site.tld/controller/action

Однако я хочу избавиться от имени контроллера в ссылках и не могу заставить его работать. Например, когда я нажимаю «Link1», я хочу получить http://www.site.tld/Link1

У меня следующая структура файла

применение
библиотека
общественности
испытание
.htaccess
index.php

.htaccess в папке public имеет следующее содержимое:

ПереписатьEngine на
RewriteCond% {REQUEST_FILENAME} -s [ИЛИ]
RewriteCond% {REQUEST_FILENAME} -l [ИЛИ]
RewriteCond% {REQUEST_FILENAME} -d
RewriteRule ^. * $ - [NC, L]
RewriteRule ^. * $ Index.php [NC, L]

Если это полезно, я также замечаю, что каждое действие в контроллере индекса использует

$ Это -> _ редирект ( '/ индекс / действие');

Я попытался переписать файл .htaccess, но безуспешно. Это в основном не указывало на физический контроллер индекса. Пожалуйста, порекомендуйте.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 10 июля 2011

Вы ищете не в том месте. Проблема не в вашем .haccess файле, а в том, как Zend Framework перенаправляет URL-адреса на соответствующий контроллер и действие. Вы просите переопределить маршрут по умолчанию Zend_Controller_Router. Как сказал @Adrian, «роутер здесь твой друг». Я предоставлю вам ответ на вашу проблему, но он поставляется с большим ПРЕДУПРЕЖДЕНИЕМ:

Следующая команда переопределит ваш маршрут по умолчанию и не позволит вам посещать контроллеры и модули, которые открываются через URL-адреса, такие как: example.com/name.

Поместите это в ваш /application/Bootstrap.php файл:

public function _initCustomRoute()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $route = new Zend_Controller_Router_Route(':action', array(
        'module'     => 'default',
        'controller' => 'index',
        'action'     => 'index'
    ));
    $router->addRoute('default-override', $route);

}

Примечание. Существуют способы проверки возможности отправки запроса и маршрутизации в это местоположение только при сбоях, но это уже другая тема.

2 голосов
/ 09 июля 2011

Маршрутизатор - ваш друг здесь, проверьте документацию на Zend_Controller_Router и узнайте, как его настроить в вашей начальной загрузке Было бы слишком много, чтобы провести через эту настройку в нескольких словах.

Обновление - дополнение к вашему вопросу :
Не уверен, где вы находитесь сейчас и как «по умолчанию» ваши настройки. Вот краткое изложение конфигурации маршрутизатора в стандартной настройке по умолчанию

URL: /home/user
// translates in a default route setup into
home = controller - HomeController.php
user = action     - HomeController::userAction()
// by default you must have a controller named home and within it an action named user
// however, you can override this default to something like this
home = controller - FloridaController.php
user = action     - FloridaController::miamiAction()
// if you add the colon in your config you will change the placeholder in the url to a variable
:user = action     - FloridaController::miamiAction()
URL: /home/John /home/Mike
// all urls are routed to FloridaController::miamiAction()

Существует довольно много способов настройки конфигурации для маршрутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...