有没有人尝试过这个?有没有可能,如果有的话,如果我尝试完成它会遇到什么样的问题?
5 回答
如果您的目标是在控制器之间共享逻辑:
将逻辑添加到 AppController 以与应用程序中的所有控制器共享。
制作一个组件并将其添加到 $this->components 以供您要共享的控制器使用。
在控制器之间添加额外的继承只能作为最后的手段,因为您必须特别注意如何处理组件和助手。例如,您必须手动将 $this->components 和 $this->helpers 与 AppController 和您继承的控制器合并。
我在 AppController 和应用程序中的一些特殊控制器之间添加了一个附加层。
您将遇到的唯一问题是 $helpers 和 $components 类属性的合并。在 CakePHP 中,覆盖控制器中的这些变量不会覆盖 AppController 设置的变量,但会合并它们。
这是通过 Controller 基类中名为 __mergeVars() 的特殊方法完成的,不幸的是,它只针对默认控制器结构执行此操作。如果您希望 $helpers 和 $controllers 从 AppController 继承到您的控制器,您的附加层将不会正确合并。
您将遇到属性不合并而是覆盖的$components
问题。$helpers
请务必定义protected $_mergeParent = 'YourParentClass'
正确完成此操作。默认值为'AppController'
.
源代码: http ://api.cakephp.org/2.4/source-class-Controller.html#294-301
为什么不试试?至少,它已经通过 Controller -> AppController -> MyController 类完成了。
当然,您可以轻松地在 Cake 中对控制器进行子类化。然后您通常会利用它们的钩子函数(例如“beforeFilter”、“afterFilter”等)将运行时逻辑添加到您的控制器中。我通常会放置至少 1 个抽象控制器在 cakes 控制器和您在路由中配置的最终控制器之间。