php - CakePHP 组件或其他 Controller 类?

标签 php cakephp cakephp-2.0

要在 Controller 类之间使用相同的逻辑,我们可以创建 components 。但我想知道组件相对于自定义类有什么优势?

我们可以在另一个类中构造 Controller 类的实例。因此,我们可以对 $MyOtherController->myAction 使用相同的逻辑,而不是 $this->MyComponent->myAction
你能比较一下它们吗?或者我错过了什么?

最佳答案

CakePHP 组件和行为基本上是装饰器模式的应用。虽然您可能认为通过对 AppController 类进行子类化可以获得相同的结果,但如果您要考虑组件可能使用的所有不同组合,则这将需要您创建大量难以处理的子类来仅使用少数组件即可达到相同的结果。相反,您可以通过依赖注入(inject)随意混合和匹配组件/行为。

假设您当前有 3 个 Controller 子类:

  1. MultiStepController
  2. 安全 Controller
  3. MultiStepSecurityController

如果您想添加一种新类型的 Controller ,那么您必须创建 4 个新的 Controller 子类:

  1. FooMultiStepController
  2. FooSecurityController
  3. FooMultiStepSecurityController
  4. FooController

与仅将 'Foo' 添加到您想要在其中使用该组件的任何 Controller 的 $components 变量相比,这是大量冗余代码和不必要的工作。

因此,从可维护性和代码重用的角度来看,在大多数情况下,组件是比子类化更好的解决方案。

关于php - CakePHP 组件或其他 Controller 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11658139/

相关文章:

cakephp - 如何设置页面为索引页

php - 如何复制 CakePHP 实体

php - Cakephp Html 助手结构

javascript - 如何从 JSON 中获取值?

php - Laravel 代客日志

php - 基于 PHP 的 Google AdMob 混合移动应用

php - CakePHP 保存空模型

php - SQLSTATE[HY000] [1049] 未知数据库 'u675813745_ymeda'

facebook - cakephp auth登录功能与facebook sdk之间存在冲突

CakePHP - 包含应用程序目录之外的目录中的类