使用基本控制器进行扩展并调用parent :: WhateverAction

时间:2013-05-29 14:32:46

标签: zend-framework

我正在开发一个Zend 1. *项目,其中每个控制器都扩展了一个基本控制器,我们在子节点中复制动作,并调用“parent :: whateverAction()”。

是否在Zend的控制器常规练习中复制/调用父操作?我一直认为这种技术需要快速鞭打。这是我的误解吗?

干杯。

2 个答案:

答案 0 :(得分:0)

这真的取决于应用程序。控制器插件或操作助手是您看到人们为其创建基本控制器的许多方法的更好解决方案,但在某些情况下基本控制器可能很有用。例如。我有一个应用程序,其中几个控制器具有非常相似的CRUD操作,因此它使得“crud控制器”以标准方式实现这些事情变得更容易,并且如果他们需要执行其中一个操作,则各个控制器可以覆盖单个方法。操作略有不同。

答案 1 :(得分:0)

您预计放入BaseController的任何常见处理都可以进入:

  1. BaseController::xxxAction()作为一种公共方法,正如您所描述的那样。
  2. BaseController::xxxMethod()作为受保护的方法
  3. 在自定义action-helper
  4. 通常情况下,我不会在基础中创建公开xxxAction()。在我看来,当路由映射到它时,应该直接调用 action 。在基本控制器类中隐藏的操作并不真正满足该标准。

    将常见处理转储到xxxAction()上受保护的方法BaseController是非常常见的,可能还不错。所有子控制器都可以访问该处理,并可以在其操作中调用它。

    这种方法唯一真正的缺点是它会使BaseController膨胀。毕竟,并非所有操作都会使用基础中隐藏的特定功能,那么为什么要加载它并在请求中解析它,如果它不会在该请求中使用呢?

    出于这个原因,“Zendish”方法是创建一个包含该常用功能的动作助手。这种方法有两个主要好处:

    1. 可以在操作中调用帮助程序,并且动态加载。在没有调用它的请求期间,无需解析和加载该代码。

    2. 原则上,由于助手是自己的类,因此可以更容易地进行单元测试。

    3. 不完全是一个难以回答的问题;只是一些想法的题材。