为zend模块化结构创建一个公共控制器类


Creating a common controller class for zend modular structure

我正在为一个项目使用zend模块化结构。我有下面的目录结构

 application/
   modules/
    default/
        controllers/
            IndexController.php
            FooController.php
        models/
        views/
            scripts/
                index/
                foo/
            helpers/
            filters/
    blog/
        controllers/
            IndexController.php
        models/
        views/
            scripts/
                index/
            helpers/
            filters/
    news/
        controllers/
            IndexController.php
            ListController.php
        models/
        views/
            scripts/
                index/
                list/
            helpers/
            filters/

我想创建一个公共控制器类,我将在所有模块的控制器中扩展到该类

例如,我不想创建一个像下面这样的类

 class My_Common extends Zend_Controller_Action 
 {
  public function init()
  {
    
  }
}

在所有模块的控制器中,我想像一样扩展它

 class News_IndexController extends My_Common
 {
     public function init()
 {
    
 }
 }

我怎样才能做到这一点?我试图在默认控制器中创建它,但它不起作用。

您可以通过在库文件夹中添加my的命名空间来轻松实现这一点。如果你考虑到zend库,文件夹结构会是这样的:

公共文件夹结构//图书馆/zend/myNamespace/控制器/Common.php

然后在您的模块中,只需扩展MyNamespace_Controller_Common。

我的方法是在库目录中添加一个"My"文件夹,然后复制Zends类结构,例如:

创建文件

library/My/Controller/Action.php,类名为:My_Controller_Action

确保在application.ini文件中包括:autoloaderNamespaces.my="my_",其中包括自动加载器的"我的目录"。

然后,您应该能够从任何模块控制器扩展My_Controller_Action。