ZF:扩展模块indexController,或在indexController中运行init()

时间:2010-09-29 13:55:26

标签: model-view-controller zend-framework

我正在考虑从indexController扩展我的所有控制器。我在索引控制器中有一个init()函数,可以执行很多东西。这不会在fooController请求时执行。

我已经注册了一个viewSetup插件。这是在所有请求上执行的,那很好。

我的问题是有一个博客模块需要做一些事情,不需要在新闻模块中完成。

一个很好的例子是我的二级菜单,它特定于活动模块。

class fooController extends indexController这样我也可以在fooController中覆盖indexController中的init()函数。不幸的是,自动加载器找不到indexController类。

以下是有效的,如果我首先需要indexController.php文件

<?php
require_once('indexController.php);

class fooController extends indexController {

    function init() {
        parent::init();

        // Do changes to, ie. setup controller specific menu, or add menu items.
    }
}

非常感谢的想法:)

2 个答案:

答案 0 :(得分:1)

这似乎是action helper的情况。您可以将常用功能打包到这样的帮助程序中,并在每个控制器的基础上(在init()方法中)或每个操作的基础上调用它。

答案 1 :(得分:0)

可能的解决方案,取决于您想做什么:

  • 自定义抽象控制器类
  • bootstrap _init method
  • 动作助手
  • 重载方法
  • 控制器插件

在这种情况下看起来控制器插件是最好的(因为你已经在使用一个), 但你只需要为它添加一些条件,例如仅在请求特定模块,控制器和操作时执行代码。