我正在深入研究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;
}
答案 0 :(得分:2)
Zend_Controller_Request_Abstract
的类型提示实际上意味着请求必须是扩展Zend_Controller_Request_Abstract
的类的实例。
除非你明确地不使用ZF的路由,否则你最好通过路线对参数进行卫生处理。否则,如果您收到空白屏幕,则表示display_errors
已关闭,而是记录了PHP错误或异常。检查Web服务器错误日志以查看实际问题。