2010-03-08 62 views
3

我为我的网站使用了Zend Framework,并且创建了一个特殊模块“api”来创建...嗯,一个API。Zend Framework:控制器目录中的子目录

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

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

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


我尝试使用分离器_通过smack0007的建议和它似乎合乎逻辑的,Zend框架平时是怎么指子目录,但我得到了一个错误。


编辑:删除,因为它是不相关的问题,因为这只是一个问题,因为我没有使用黑白配的情况下,相信我只好把大写来的第一个字母长的错误文本该目录。现在一切正常。

+0

因为每个控制器可以有它自己:

最后,增加了航线意见,我认为最好使用多个模块。 api_contents模块,api_users模块。 我想现在去找到如何将子模块放在模块中! – Alexar 2010-03-08 15:22:39

+0

转到[http:// stackoverflow。COM /问题/ 592299/Zend的框架-1-7-5-如何到变化控制器目录] [1] [1]:http://stackoverflow.com/questions/592299/zend-framework-1-7-5-how-to-change-controller-directory – 2011-10-14 08:10:17

回答

3

我已经在1.5版本的项目中完成了这项工作,但我不知道它是否会继续工作。

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

所以你的情况,你将有一个名为控制器:

contents_FooController 

和路径:

/contents_foo/index 
+0

好吧,在我看来,这种行为已被改变:我尝试访问控制器中的Contents_FooController子目录的“内容”控制器“目录(在默认模块中),它告诉我它找不到它。 我将用这些数据编辑问题信息。 – Hugo 2010-03-08 15:25:39

+0

为我做一件事:将“contents”文件夹重命名为“Contents” – smack0007 2010-03-08 15:52:59

+0

让我纠正我刚刚说的,它确实有效(编辑错误的目录,抱歉),谢谢!我错误地认为我必须将目录的名称改为大写,非常感谢您的帮助。 – Hugo 2010-03-08 16:38:39

0

我试图在URL来完成多层次的旧应用程序,并避免使用大量的网址roules。 所以我想到了将控制器分组到子目录并为其定义一个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' 
) 

现在,你可以调用的indexAction在OtherController.php