0

我正在深入研究 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. 为什么在这里声明一个抽象类的实例。

继续前进,我想覆盖 $_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;

}
4

1 回答 1

2

有效的类型提示Zend_Controller_Request_Abstract意味着请求必须是扩展类的实例Zend_Controller_Request_Abstract

除非您故意不使用 ZF 的路由,否则最好通过路由对参数进行清理。否则,如果您得到一个空白屏幕,则表示display_errors已关闭,而是记录了 PHP 错误或异常。检查您的 Web 服务器错误日志以了解实际问题是什么。

于 2013-04-19T19:42:12.253 回答