Cake PHP中的控制器继承?

时间:2008-12-11 18:00:56

标签: php cakephp inheritance

有没人试过这个?是否可能,如果是这样,如果我试图完成它会遇到什么样的问题?

5 个答案:

答案 0 :(得分:4)

如果你的目标是在控制器之间共享逻辑:

  • 将逻辑添加到AppController以与应用中的所有控制器共享。

  • 创建一个组件并将其添加到要分享它的控制器的$ this->组件。

在控制器之间添加额外的继承只能作为最后的手段,因为您必须特别注意如何处理组件和帮助程序。例如。你必须手动合并$ this-> components& $ this->使用AppController和您继承的控制器的助手。

答案 1 :(得分:3)

我在AppController和应用程序中的一些特殊控制器之间放了一个额外的层。

您遇到的唯一问题是$ helpers和$ components类属性的合并。在CakePHP中,覆盖控制器中的那些变量将覆盖AppController设置的变量,但它会合并它们。

这是通过Controller基类中名为__mergeVars()的特殊方法完成的,遗憾的是它仅针对默认控制器结构。如果您希望从AppController向控制器发送$ helper和$ controllers继承,那么您的附加图层将无法正确合并。

答案 2 :(得分:2)

您将遇到$components$helpers属性的问题,而不是合并而是覆盖。请务必定义protected $_mergeParent = 'YourParentClass'以正确完成此操作。默认值为'AppController'

源代码: http://api.cakephp.org/2.4/source-class-Controller.html#294-301

答案 3 :(得分:1)

为什么不试试?至少,它已经完成了控制器 - > AppController - > MyController类。

答案 4 :(得分:0)

当然,你可以轻松地在Cake中继承控制器..然后你通常会利用他们的钩子函数,比如'beforeFilter','afterFilter'等来为你的控制器添加运行时逻辑。我通常至少把它放在你的控制器上蛋糕控制器和您在路径中配置的最终控制器之间的1个抽象控制器。