Cakephp 扩展自定义AppController类时的组件问题
我的CakePHP应用程序中有一个自定义结构,如下所示: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中声明的组件将被擦除。我想我也会有
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()方法,如果传递数组,该方法将抛出一个错误。是的,没问题。当我必须学习时,我会更好地记住它:)。