Проблема Zend Framework с сопоставлением URL-адресов

Я пытаюсь сопоставить действие с базовым URL-адресом и контроллером по умолчанию.

Поклянись, что это должно быть прямолинейно или даже нестандартно, но как сопоставить действия в контроллере по умолчанию с базовым URL-адресом с помощью Zend Framework? Я новичок в Framework, поэтому надеюсь, что мне просто не хватает чего-то очевидного.

Попытка нанести на карту:

domain.com/index/my-page на domain.com/my-page

не нарушая настройки других маршрутов по умолчанию.

Я могу взломать его с помощью Zend_Router, но он нарушает другие правила, например. /: контроллер /: действие /: модуль /: контроллер /: действие

примечание: / index / my-page - это пример URL-адреса - мне нужно, чтобы он работал для всех действий indexController динамически.

Примеры сопоставления URL-адресов по запросу 'tharkun' indexController имеет методы indexAction и contactAction, требующие URL-адресов

/index
/index/contact
/
/contact

2-й контроллер testController имеет методы indexAction и monkeyAction, которым нужны URL-адреса

/test
/test/index
/test/monkey

в основном - если система не может найти контроллер VAR, она ищет действие VAR в контроллере по умолчанию


person coffeerings    schedule 05.01.2009    source источник
comment
извинения должны были прояснить, что это был всего лишь мой пример URL-адреса - мне нужно, чтобы он работал для всех действий indexController динамически, когда я добавляю регулярные выражения и улавливаю, это когда он начинает ломать другие маршрутизаторы по умолчанию.   -  person coffeerings    schedule 05.01.2009


Ответы (1)


Контроллер по умолчанию - IndexController.

Отображение (по умолчанию) работает следующим образом:

/ => IndexController::indexAction
/index => IndexController::indexAction
/index/foo => indexController::fooAction
/foo => FooController::indexAction

Итак, добавьте определяемый пользователем маршрут, подобный этому (будет иметь более низкий приоритет, чем значение по умолчанию)

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$route = new Zend_Controller_Router_Route(
    '/:action',
    array(
        'controller' => 'index'
    )
);
$router->addRoute('user', $route);

Это не помешало мне использовать маршруты по умолчанию.

Изменить: как сказано в комментарии к кофе, это нарушит indexAction контроллеров, отличных от по умолчанию.

person gnud    schedule 05.01.2009
comment
почти :) он работает для всех, кроме действий по умолчанию в других контроллерах. поэтому методы indexController /, / index и / testme работают, но в testController работают только / test / index и / test / testme, по умолчанию / test / action не работает. - person coffeerings; 05.01.2009
comment
Ах, на самом деле я не использую индексный метод другого контроллера в моем первом маленьком приложении Zend. - person gnud; 05.01.2009