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

Zend framework Zend Framework:控制器目录中的子目录,zend-framework,url-routing,controllers,subdirectory,Zend Framework,Url Routing,Controllers,Subdirectory,我正在为我的网站使用Zend框架,刚刚创建了一个特殊的模块“api”来创建。。。嗯,一个API 现在,我的模块中有很多控制器,我想在这个控制器目录中创建子目录,以便“整理”它。我的新结构是这样的: - controllers/ - controllers/contents/[controllers] - controllers/users/[controllers] - controllers/misc/[controllers] 然而,我发现自己完全无法找到使用Zend_Contro

我正在为我的网站使用Zend框架,刚刚创建了一个特殊的模块“api”来创建。。。嗯,一个API

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

 - controllers/
 - controllers/contents/[controllers]
 - controllers/users/[controllers]
 - controllers/misc/[controllers]
然而,我发现自己完全无法找到使用Zend_Controller_Router_路由可以映射到这些控制器的URL和重定向类型。是否有可能以某种方式做到这一点,或者我应该回到正常结构并将所有控制器放在同一个目录中


我尝试使用分隔符,正如smack0007所建议的那样,考虑到Zend Framework通常是如何引用子目录的,这似乎是合乎逻辑的,但我得到了一个错误



编辑:删除了长错误文本,因为它与问题无关,因为这只是一个问题,因为我没有使用正确的大小写,我认为我必须在目录的第一个字母前加一个大写字母。现在一切都很好。

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

您必须在控制器前面加上“{FOLDER}\”前缀,然后在url中使用全名

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

contents_FooController
路线:

/contents_foo/index

我试图为一个旧的应用程序在url上实现多个级别,并避免使用大量url麻烦。 所以我考虑将控制器分组到子目录中,并为其定义一个url轮盘

结构

modules --test --controllers --sub -- OtherController.php --DefaultController.php 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');
    }
因此,这将转发到子目录中的控制器

  • “$level1”对应于控制器名称,例如,如果$level1=“other”,则我们将转发到Othercontroller.php
  • “$level2”是操作,例如,$level1=“add”然后调用addAction()
最后,添加了路线:

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,因为每个控制器可能有自己的视图,我认为最好使用多个模块。一个api_内容模块,一个api_用户模块。我想现在去看看如何把子模块放在一个模块里!goto[[1]:在我看来,这种行为已经改变了:我试图访问“controllers”目录(在默认模块中)的子目录“Contents”中的控制器Contents\u FooController,它告诉我它找不到它。我将用这些数据编辑问题信息。为我尝试一件事:重命名“Contents”文件夹到“目录”让我纠正我刚才说的,它确实有效(编辑了错误的目录,对不起),谢谢!我犯了一个错误,因为我认为我必须将目录名称大写,非常感谢您的帮助。
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'
)