当前位置:  开发笔记 > 编程语言 > 正文

使用Zend Framework处理输入(Post,get等)

如何解决《使用ZendFramework处理输入(Post,get等)》经验,为你挑选了3个好方法。

我在zend代码上重新分解php,所有的代码都充满了$_GET["this"]$_POST["that"].我一直使用的更phpish $this->_request->getPost('this')$this->_request->getQuery('that')(这一个是没有这么多getGet的getquery insteado逻辑).

所以我想知道我的方法是否更安全/更好/更容易保持.我在Zend Framework文档中读到,您必须验证自己的输入,因为请求对象不会这样做.

这让我有两个问题:

这两个最好的是什么?(或者如果还有另一种更好的方式)

使用此方法验证php输入的最佳做法是什么?

谢谢!



1> Brian Fisher..:

我通常使用$ this - > _ request-> getParams(); 检索帖子或URL参数.然后我使用Zend_Filter_Input进行验证和过滤.getParams()不进行验证.

使用Zend_Filter_Input,您可以使用Zend Validators进行应用程序级别验证(或者您也可以自己编写).例如,您可以确保'months'字段是一个数字:

$data = $this->_request->getParams();

$validators = array(
    'month'   => 'Digits',
);

$input = new Zend_Filter_Input($filters, $validators, $data);



2> Till..:

扩展Brian的答案.

正如你指出,你还可以检查出$this->_request->getPost()$this->_request->getQuery().如果你推广getParams(),有点像使用$_REQUEST超全球,我不认为这在安全性方面是可以接受的.

除Zend_Filter之外,您还可以使用简单的PHP来强制转换所需的内容.

例如:

$id = (int) $this->_request->getQuery('id');

对于其他值,它会变得更复杂,因此请确保在数据库查询中引用(Zend_Db,请参阅引用标识符$db->quoteIdentifier()),并在视图中使用$this->escape($var);以转义内容.



3> Jan Hančič..:

您不能为get/post数据编写一个通用的验证函数.在某些情况下,您需要一个字段为整数,而在其他情况下需要一个日期.这就是为什么zend框架中没有输入验证的原因.

您必须在需要的地方编写验证代码.你当然可以编写一些辅助方法,但你不能指望getPost()为你自己验证一些东西......

它甚至不是getPost/getQuery的地方来验证任何东西,它的工作是为你提供你想要的数据,从那里发生的事情应该不是它的关注.

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有