2

这是一个设计模式问题。

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

让插件中的所有控制器扩展FooAppController. 但我想绕过 FooAppController 而让 FooUsersController 直接扩展 UsersController。
这打破了使用插件范围beforeFilter等的可能性......

我的问题:

  • 这是否不仅仅是插件范围内的beforeFilter/ beforeRender
  • 我是否忽略了从 FooAppController 和 UsersController 继承功能的通用模式?还是我应该处理一种选择?
  • 我提出的建议是一个很大的禁忌吗?或者只要我知道我遵循的模式就可以了?

亲切的问候,巴特

4

2 回答 2

0

您可以在没有任何问题的情况下扩展应用程序控制器,确实不再存在插件范围的回调,您可以向插件控制器添加一个组件来处理插件范围的回调,也许可以作为解决方案,并且仍然保持插件控制器干燥

于 2012-09-13T20:11:31.023 回答
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');
于 2016-08-24T11:32:47.760 回答