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

Cakephp 扩展自定义AppController类时的组件问题,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,我的CakePHP应用程序中有一个自定义结构,如下所示: class AppController extends Controller // default class ExtendedAppController extends AppController class ChildController extends ExtendedAppController 当我在ChildController类中声明组件时,我在ExtendedAppController中声明的组件将被擦除。我想我也会有

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

class AppController extends Controller // default

class ExtendedAppController extends AppController

class ChildController extends ExtendedAppController

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

Cake只将当前控制器的变量与一个父类合并,默认情况下,该父类在变量
$\u mergeParent='AppController'中设置控制器
类中的code>

您可以通过定义以下内容在ChildController中重写此变量:

class ChildController extends ExtendedAppController {

    protected $_mergeParent = 'ExtendedAppController';

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

这就是控制器::\u mergeControllerVars()方法在内核中的编写方式。这正是为什么:

HtmlHelper、FormHelper和SessionHelper可通过 默认值,与SessionComponent一样但如果您选择定义 在AppController中拥有$helpers数组,请确保包含HtmlHelper 和FormHelper,如果您希望它们在您的 控制器


我让它工作了。我花了一些时间,因为
$\u mergeParent
应该是字符串,而不是数组。谢谢你的帮助,很抱歉!我自己也做了很多实验,看看是否可以传递一个数组,然后复制粘贴错误的代码,而不是复制粘贴错误的代码。显然,$\u mergeParent需要是一个字符串,因为它被传递给is\u子类\u of()方法,如果传递数组,该方法将抛出一个错误。是的,没问题。当我必须学习时,我会更好地记住它:)。