我的网站结构目前是这样的:
/cms/
/data/ - caches etc
/modules/
/public/ - aliases from site public folders
/website1
/images
/layouts, views, scripts, css etc
(no index.php because of the alias)
这很好用,我的系统查找别名文件夹来运行应用程序。但是,我现在已经到了想要扩展其中一个模块控制器的地步。
理想情况下,我的结构将是:
/cms/
.. as above
/CLIENT_ID/
/modules
..extending/overriding scripts
但是,这就是问题:必须根据Zend的文件名结构(Module_IndexController等)调用要调用的控制器,因此扩展基类将是:
Module_IndexController extends Module_IndexController
这显然不会很好用。我的想法应该是:
CLIENTID_Module_IndexController extends Module_IndexController
但是我一直坚持如何实现这个想法?我可以在前端控制器上使用:addControllerDirectory添加控制器目录,但我猜我需要在某处更改被调用的类名?
然后我可以检查文件夹是否是目录并运行覆盖类而不是基类。
有什么想法吗?我愿意重组文件夹,但显然需要将媒体文件保存在公共文件夹中。
答案 0 :(得分:0)
问题是你没有使用Zend_Dispatcher,Zend_Autoloader和Zend_Controller编写的conventional directory structure。
在我看来,你有两种可能的解决方案:
在第二种情况下,考虑可能的项目选择:
/websiteN
之外的文件夹中,然后放入您设置includePaths.library = /path/to/cms/folder"
的websiteN的application.ini中。在这种可能性中存在许多可能的问题,必须在了解您的项目时进行评估。通过这种方式,您可以调用模型,扩展网站的类来扩展cms,但是您不能将您的cms用作variuos级别的用户交互的入口点和管理者。答案 1 :(得分:0)
正如您所说,您可以告诉Zend每个模块的基本控制器目录。
$controller = Zend_controller_Front::getInstance();
$controller->setControllerDirectory(
array("module_name" => "directory_path")
);
我认为Zend希望命名约定是ClientId_Module_Controller。但是,如果您真的遇到了命名约定,并且正在使用php 5.3,那么您可以使用命名空间。