Zend框架在模型中而不是表单中验证数据


zend framework validate data in model instead in the form

使用Zend框架在我的应用程序中,编辑数据库中的数据可以编译html表单或发送http post请求(我的服务器实现为web服务)。在第二种情况下,不呈现表单。问题:如果我把验证规则放在表单中,当服务器接收到一个不是从表单发送的post请求,而是从一个通用的http post请求(如移动应用程序)发送的时候,数据不会被验证/过滤,因为验证绑定在表单中。

是否可能有一个唯一的集中验证器系统?在我看来,数据必须在保存在数据库之前进行验证,而不是在表单中!

想法?

您可以在文档Forms and Actions

中找到类似的示例。

在Zend Framework 2中,这是使用输入过滤器完成的,它可以是独立的,也可以在任何类中定义,实现了InputFilterAwareInterface接口

所以,在这个例子中模型实体实现了InputFilterAwareInterface,并且有方法setInputFiltergetInputFilter。之后你可以调用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
}