我的CakePHP应用程序中有一个自定义结构,如下所示:
class AppController extends Controller // default
class ExtendedAppController extends AppController
class ChildController extends ExtendedAppController
当我在 ChildController 类中声明组件时,我在 ExtendedAppController 中声明的组件被擦除。我想我也会和助手一样有这个问题。如何合并数组以避免这种情况?
答案 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 如果您希望它们在您的默认情况下仍然可用 控制器。