为zend模块化结构创建一个通用控制器类

时间:2012-01-10 09:53:49

标签: php zend-framework code-layout

我正在为项目使用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()
 {

 }

 }

我怎么能做到这一点。请帮忙 。我尝试在默认控制器中创建它,但它不起作用。

2 个答案:

答案 0 :(得分:1)

您可以通过向库文件夹添加my的命名空间来轻松实现此目的。如果您考虑使用zend库,文件夹结构将如下所示:

the_common_folder_structure/ 
.../
library/
    zend/
    myNamespace/
      Controller/
        Common.php

然后在你的模块中扩展MyNamespace_Controller_Common。

答案 1 :(得分:0)

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

创建文件

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

确保在application.ini文件中包含:autoloaderNamespaces.my =“My_”,其中包括自动加载器的My目录。

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