扩展自定义AppController类的组件问题

时间:2014-02-25 16:37:02

标签: cakephp cakephp-2.3

我的CakePHP应用程序中有一个自定义结构,如下所示:

class AppController extends Controller // default

class ExtendedAppController extends AppController

class ChildController extends ExtendedAppController

当我在 ChildController 类中声明组件时,我在 ExtendedAppController 中声明的组件被擦除。我想我也会和助手一样有这个问题。如何合并数组以避免这种情况?

1 个答案:

答案 0 :(得分:2)

Cake将当前控制器的变量仅与 ONE 父类合并,默认情况下,该类在核心$_mergeParent = 'AppController';类的变量Controller中设置。

您可以通过定义:

在ChildController中覆盖此变量
class ChildController extends ExtendedAppController {

    protected $_mergeParent = 'ExtendedAppController';

}

但是,这将忽略AppController中定义的所有帮助程序和组件,因此将组件和帮助程序从AppController复制到ExtendedAppController。这应该回答你的问题,因为你可以使用来自ChildController的ExtendedAppController组件,而其他控制器扩展AppController将使用AppController的组件。

这是Controller :: _ mergeControllerVars()方法写入核心的方式。这正是book says

的原因
  

HtmlHelper,FormHelper和SessionHelper可用   默认情况下,与SessionComponent一样。 但是如果你选择定义你的   在AppController中拥有$ helpers数组,确保包含HtmlHelper   和FormHelper 如果您希望它们在您的默认情况下仍然可用   控制器。