Zend Framework:控制器目录中的子目录

时间:2010-03-08 13:26:35

标签: zend-framework url-routing controllers subdirectory

我在我的网站上使用Zend Framework,只是创建了一个特殊的模块“api”来创建......好吧,一个API。

现在,我的模块中有很多控制器,我想在这个控制器目录中创建子目录,以便“整理”它。我的新结构将是这样的:

 - controllers/
 - controllers/contents/[controllers]
 - controllers/users/[controllers]
 - controllers/misc/[controllers]

但是,我发现自己完全无法找到使用Zend_Controller_Router_Route可以映射到这些控制器的网址和重定向。有可能以某种方式这样做或者我应该回到正常结构并将所有控制器放在同一目录中吗?


我尝试使用smack0007建议的分隔符_,因为Zend Framework通常引用子目录似乎是合乎逻辑的,但是我得到了一个错误。


编辑:删除了长错误文本,因为它与问题无关,因为它只是一个问题,因为我没有使用propre案例,相信我必须在目录的第一个字母上加一个大写。一切都很好。

2 个答案:

答案 0 :(得分:4)

我已经在1.5版本的项目中完成了这个,但我不知道它是否会再起作用了。

您必须在控制器前加上“{FOLDER} _”,然后在网址中使用全名。

因此,在您的情况下,您将拥有一个名为:

的控制器
contents_FooController

和路线:

/contents_foo/index

答案 1 :(得分:0)

我试图在旧网址的网址上完成多个级别,并避免使用大量的网址。 所以我想到将控制器分组到子目录中并为它定义一个url roule。

对于结构

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,你可以调用OtherController.php中的indexAction