我正在深入研究 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 类型,因为从技术上讲,不能拥有抽象类的实例。
所以我的问题:
- 为什么在这里声明一个抽象类的实例。
继续前进,我想覆盖 $_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;
}