Php Zend框架扩展模块控制器
我的网站结构目前如下:Php Zend框架扩展模块控制器,php,zend-framework,Php,Zend Framework,我的网站结构目前如下: /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) 这很好,我的系统会查看alias文件夹来运行应用程序。但是,现在我想扩展一个模块控制器 理想情况
/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)
这很好,我的系统会查看alias文件夹来运行应用程序。但是,现在我想扩展一个模块控制器
理想情况下,我的结构是:
/cms/
.. as above
/CLIENT_ID/
/modules
..extending/overriding scripts
Module_IndexController extends Module_IndexController
但是,这就是问题所在:要调用的控制器必须根据Zend的文件名结构(Module_IndexController等)进行调用,因此扩展基类需要:
/cms/
.. as above
/CLIENT_ID/
/modules
..extending/overriding scripts
Module_IndexController extends Module_IndexController
这显然不好用。我的想法是:
CLIENTID_Module_IndexController extends Module_IndexController
但我一直在想如何实现这个?我可以在前端控制器上使用:addControllerDirectory添加控制器目录,但我猜我需要在某个地方更改被调用的类名
然后,我可以检查文件夹是否是目录,并运行覆盖类而不是基类
有什么想法吗?我愿意重新构造文件夹,但显然需要将媒体文件保存在公用文件夹中。问题是您没有使用Zend_Dispatcher、Zend_Autoloader和Zend_Controller编程时使用的 我认为你有两种可能的解决方案:
在第二种情况下考虑了可能的投影选择:
- 为所有站点创建独立的zend framework项目,并在这些项目中创建CMS文件夹的别名
- 与前一个类似,但通过以下方式自定义模块位置:
- 将CMS用作库:将所有CMS文件放在
之外的文件夹中,然后在websiteN的application.ini中设置/websiteN
。在这种可能性中有很多可能的问题,必须在了解您的项目的情况下进行评估。通过这种方式,您可以调用模型,扩展网站的类以扩展cms,但您不能将您的cms用作各种级别用户交互的入口点和管理器includePaths.library=/path/to/CMS/folder“
$controller = Zend_controller_Front::getInstance();
$controller->setControllerDirectory(
array("module_name" => "directory_path")
);
我认为Zend希望命名约定是ClientId\u模块\u控制器。但是,如果您真的被命名约定所困扰,并且正在使用PHP5.3,那么您可以使用名称空间