使用Zend框架在我的应用程序中,编辑数据库中的数据可以编译html表单或发送http post请求(我的服务器实现为web服务)。在第二种情况下,不呈现表单。问题:如果我把验证规则放在表单中,当服务器接收到一个不是从表单发送的post请求,而是从一个通用的http post请求(如移动应用程序)发送的时候,数据不会被验证/过滤,因为验证绑定在表单中。
是否可能有一个唯一的集中验证器系统?在我看来,数据必须在保存在数据库之前进行验证,而不是在表单中!
想法?
您可以在文档Forms and Actions
中找到类似的示例。在Zend Framework 2中,这是使用输入过滤器完成的,它可以是独立的,也可以在任何类中定义,实现了InputFilterAwareInterface接口。
所以,在这个例子中模型实体实现了InputFilterAwareInterface,并且有方法setInputFilter和getInputFilter。之后你可以调用isValid()
我个人把我所有的过滤器到src/ModuleName/Filter/ (UserFilter.php)。其中实现了InputFilterAwareInterface,并定义了getInputFilter()方法。
在控制器或其他类中,只需调用:
use ModuleName'Filter'UserFilter;
...
$filter = new UserFilter();
$data = $this->params()->fromPost();
if(!$filter->getInputFilter()->setData($data)->isValid()){
$data = $filter->getInputFilter()->getValues();
$errors = $filter->getInputFilter()->getMessages();
// Throw an exception
}