理解Zend_Controller_Request_Abstract和其他核心Zend类

时间:2013-04-19 18:35:58

标签: zend-framework abstract-class subclass override

我正在深入研究Zend框架,此时我有点困惑。我特别检查了Zend_Controller_Action(* _Action),Zend_Controller_Request_HTTP(* _ HTTP)和Zend_Controller_Request_Abstract(* _Abstract)。

* _Abstract类,顾名思义是一个抽象类,因此无法实例化,并且主要提供方法存根以及一些最终实现。实际的实现是* _HTTP和* _Simple类,它们是* _Abstract的子类。很公平。

现在我正在查看* _Action类,就在这里:http://framework.zend.com/apidoc/1.0/Zend_Controller/Zend_Controller_Action.html

看一下$ _request变量,它声明它是* _Abstract类型的实例。在这一点上,我很困惑,因为我不知道为什么它应该是* _Abstract类型而不是* _Http,因为从技术上讲,它不能具有抽象类的实例。

所以我的问题:

  1. 为什么在此处声明抽象类的实例。
  2. 继续,我想覆盖$ _request类的getParams()方法,因为这是我们的应用程序检索所有参数的方式,我想在这里对我们的所有输入应用一些常见的清理和黑名单规则。

    不幸的是,在我的BaseController(由所有其他控制器进行子类化的主控制器)中,我声明了一些效果:

    $_request = new RequestClass(); //RequestClass subclasses Zend_Controller_Request_Http and overrides getParams()
    

    我的应用程序没有以它应该的方式启动(我得到一个空白的屏幕)。

    对于那些更好奇的人,RequestClass()getParams()没有什么花哨但是:

    getParams()
    {
      $params = parent::getParams();
      //sanitization rules over $params;
      return $params;
    
    }
    

1 个答案:

答案 0 :(得分:2)

Zend_Controller_Request_Abstract的类型提示实际上意味着请求必须是扩展Zend_Controller_Request_Abstract的类的实例。

除非你明确地不使用ZF的路由,否则你最好通过路线对参数进行卫生处理。否则,如果您收到空白屏幕,则表示display_errors已关闭,而是记录了PHP错误或异常。检查Web服务器错误日志以查看实际问题。