如何在插件中扩展Controller - CakePHP

时间:2012-09-12 16:54:11

标签: design-patterns cakephp plugins extend cakephp-2.1

这是一个设计模式问题。

我正在使用CakePHP 2.1,我正在编写插件(FooPlugin)。
我希望插件包含控制器(和模型),它们是应用程序中控制器的扩展。例如:我在UsersController中有一个app/Controller,它在FooPlugin中作为FooUsersController扩展,具有一些特定于Foo的操作。 (我基本上是以插件的形式构建多个应用程序,这些应用程序都依赖于一个中央用户管理应用程序)

通常的做法(我推测)让插件中的所有控制器扩展FooAppController。但我想绕过FooAppController并让FooUsersController直接扩展UsersController。
这打破了使用插件范围beforeFilter等...

的可能性

我的问题:

  • 这会不仅仅是插件范围beforeFilter / beforeRender
  • 我是否忽略了从FooAppController和UsersController继承功能的常见模式?或者我应该处理一个选择还是另一个选择?
  • 我建议大禁忌吗?或者只要我知道我遵循的模式,那就完全没问题了?

亲切的问候, 巴特

2 个答案:

答案 0 :(得分:0)

你可以扩展应用程序控制器没有任何问题,确实没有插件式回调,你可以添加一个组件到插件控制器来处理插件范围的回调可能作为解决方案,并仍然保持你的插件控制器DRY

答案 1 :(得分:0)

您只需使用App::uses('MyController', 'MyPluginName.Controller');

即可

根据2.0的文档:http://book.cakephp.org/2.0/en/core-utility-libraries/app.html#loading-files-from-plugins

其中说明如下:

在插件中加载类与加载应用程序和核心类很相似,除非您必须指定要加载的插件:

// Load the class Comment in app/Plugin/PluginName/Model/Comment.php
App::uses('Comment', 'PluginName.Model');

// Load the class CommentComponent in
// app/Plugin/PluginName/Controller/Component/CommentComponent.php
App::uses('CommentComponent', 'PluginName.Controller/Component');