我正在开发一个 Zend 1.* 项目,其中每个控制器都扩展了一个基本控制器,并且我们在两个控制器中都复制了一个动作,孩子调用“parent::whateverAction()”。
在 Zend 的控制器中复制/调用父操作是常见的做法吗?我一直认为这种技术需要快速鞭打。是我的误会吗?
干杯。
我正在开发一个 Zend 1.* 项目,其中每个控制器都扩展了一个基本控制器,并且我们在两个控制器中都复制了一个动作,孩子调用“parent::whateverAction()”。
在 Zend 的控制器中复制/调用父操作是常见的做法吗?我一直认为这种技术需要快速鞭打。是我的误会吗?
干杯。
您预期放入罐中的任何常见处理都将BaseController
进入:
BaseController::xxxAction()
正如您似乎描述的那样,作为一种公共方法。BaseController::xxxMethod()
作为受保护的方法通常,我不会xxxAction()
在基础中创建公共。在我看来,当路由映射到它时,应该直接调用一个动作。隐藏在基本控制器类中的操作并不真正满足该标准。
将通用处理转储到受保护的方法xxxAction()
中BaseController
是很常见的,并且可能很好。所有子控制器都可以访问该处理,并可以在他们的操作中调用它。
这种方法唯一真正的缺点是它往往会使BaseController
. 毕竟,并非所有操作都会使用隐藏在基础中的特定功能,那么如果它不会用于该请求,为什么要加载它并在该请求上解析它呢?
出于这个原因,“Zendish”的方式是创建一个动作助手来包含该通用功能。这种方法有两个主要好处:
可以在操作中调用帮助程序,并在运行时加载它。在不调用它的请求期间无需解析和加载该代码。
原则上,由于助手是它自己的类,它可以更容易地进行单元测试。
不完全是一个硬性答案;只是一些想法的脑残。
这真的取决于应用程序。控制器插件或动作助手是您看到人们为其创建基本控制器的许多事情的更好解决方案,但在某些情况下基本控制器可能很有用。例如,我有一个应用程序,其中几个控制器具有非常相似的 CRUD 操作,因此拥有一个以标准方式实现这些事情的“crud 控制器”使事情变得更容易,并且如果单个控制器需要执行以下操作之一,则可以覆盖单个方法操作略有不同。