Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend框架扩展模块控制器_Php_Zend Framework - Fatal编程技术网

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_自动加载器、Zend_控制器和Zend_调度程序。您可以找到可能的自定义设置,以及
  • 修改目录结构

    在第二种情况下考虑了可能的投影选择:

    • 为所有站点创建独立的zend framework项目,并在这些项目中创建CMS文件夹的别名
    • 与前一个类似,但通过以下方式自定义模块位置:
    • 将CMS用作库:将所有CMS文件放在
      /websiteN
      之外的文件夹中,然后在websiteN的application.ini中设置
      includePaths.library=/path/to/CMS/folder“
      。在这种可能性中有很多可能的问题,必须在了解您的项目的情况下进行评估。通过这种方式,您可以调用模型,扩展网站的类以扩展cms,但您不能将您的cms用作各种级别用户交互的入口点和管理器

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

    $controller = Zend_controller_Front::getInstance();
    $controller->setControllerDirectory(
         array("module_name" => "directory_path")
    );
    
    我认为Zend希望命名约定是ClientId\u模块\u控制器。但是,如果您真的被命名约定所困扰,并且正在使用PHP5.3,那么您可以使用名称空间