【问题标题】:Zend Framework extend module controllerZend Framework 扩展模块控制器
【发布时间】:2011-10-26 15:19:15
【问题描述】:

我的网站结构目前是这样的:

/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 但我猜我需要在某处更改被调用的类名?

然后我可以检查该文件夹是否为目录并运行覆盖类而不是基类。

有什么想法吗?我愿意重组文件夹,但显然需要将媒体文件保留在公用文件夹中。

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    问题是您没有使用 Zend_Dispatcher、Zend_Autoloader 和 Zend_Controller 编程使用的 conventional directory structure

    在我看来,您有两种可能的解决方案:

    1. 自定义 Zend_Autoloader 和 Zend_Controller 和 Zend_Dispatcher。您可以找到可能的自定义 hereherehere
    2. 修改目录结构。

    在第二种情况下,考虑这些可能的项目选择:

    • 为所有站点创建独立的独立 zend 框架项目,并在这些项目中创建 CMS 文件夹的别名
    • 与之前类似,但使用以下命令自定义模块位置: http://framework.zend.com/manual/en/zend.controller.modular.html#zend.controller.modular.directories
    • 将 CMS 用作库:将所有 cms 文件放在 /websiteN 之外的文件夹中,然后在 websiteN 的 application.ini 中设置 includePaths.library = /path/to/cms/folder"。在这种可能性中存在很多可能的问题,必须在了解您的项目时对其进行评估。通过这种方式,您可以调用模型、扩展网站的类以扩展 cms,但您不能将 cms 用作不同级别用户交互的入口点和管理器。

    【讨论】:

      【解决方案2】:

      如您所说,您可以告诉 Zend 每个模块的基本控制器目录。

      $controller = Zend_controller_Front::getInstance();
      $controller->setControllerDirectory(
           array("module_name" => "directory_path")
      );
      

      我认为 Zend 会希望命名约定为 ClientId_Module_Controller。但是,如果你真的不习惯命名约定,并且使用的是 php 5.3,你可以使用命名空间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多