Я пытался выполнить несколько уровней в URL для старого приложения и избегал использования большого количества URL-маршрутов.
Поэтому я подумал о группировании контроллеров в подкаталоги и определении URL-адреса для него.
Для строения
modules
--test
--controllers
--sub
-- OtherController.php
--DefaultController.php
В Bootstrap.php модуля я добавил:
public function __construct($application)
{
parent::__construct($application);
$frontController = Zend_Controller_Front::getInstance();
$frontController->addControllerDirectory(__DIR__ . '/controllers',
'test');
$frontController->addControllerDirectory(__DIR__ . '/controllers/sub',
'test_sub');
}
DefaultController.php равен
class Test_DefaultController extends Zend_Controller_Action {
public function subAction()
{
$level1 = $this->getRequest()->getParam('level1');
$level2 = $this->getRequest()->getParam('level2');
return $this->_forward($level2, $level1, 'test_sub');
}
Таким образом, он будет перенаправлен на наш контроллер в подкаталоге.
Наконец, добавлен маршрут:
new Zend_Controller_Router_Route_Regex('([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)/([a-z-]+)',
array(),
array(1 => 'module', 2 => 'controller', 3 => 'action', 4 => 'level1', 5 => 'level2'),
'%s/%s/%s/%s/%s'
)
Теперь с запросом test / default / sub / other / index вы можете вызвать indexAction в OtherController.php