Zend 2,Doctrine 2实体验证器

时间:2013-04-11 11:40:59

标签: php validation doctrine-orm zend-framework2 zend-inputfilter

单场验证

是否可以检查另一个实体中是否已存在某个值?因此,当用户名已存在时,新用户无法获得该用户名。在学说2中,有一些验证器检查对象存在或唯一对象(不知道ZF2验证器是否可以使用它?)。如何将其添加到我的inputFilter中,以便用户名不能重复?我现在有以下inputFilter用于我的用户名:

$inputFilter->add($factory->createInput(array(
                'name' => 'username',
                'required' => true,
                'filters' => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
                'validators' => array( array(
                        'name' => 'StringLength',
                        'options' => array(
                            'encoding' => 'UTF-8',
                            'min' => 3,
                            'max' => 50,
                ),
            ),
        ),
 )));

是否可以使用doctrine-validator扩展此验证器,以便检查是否存在重复的用户名?

多字段验证

目前我正在捕获DBAlException,以查看是否出现了问题,但在这种情况下,我希望返回一条错误消息,例如重复键或唯一约束无效。因此,该领域的消息出错了。

try {
$this->getEntityManager()->flush();
            } catch (\Doctrine\DBAL\DBALException $e) {
                $this->flashMessenger()->addMessage('Duplicate key, please set another name for user.');
return array(
  'form' => $form,
'flashMessages' => $this->flashMessenger()->getCurrentMessages()
                );
}

通过捕获DBAlException,您无法看到哪些唯一键无效。例如:我有一个包含以下Unique Constraint -> uq_ParentId_Name的类别实体。如何检查此约束对新(类别)实体是否有效?

1 个答案:

答案 0 :(得分:0)

检查Zend \ Validator \ Db \ NoRecordExists。例如,您希望公司名称是唯一的:

new NoRecordExists( array(
    'adapter' => $serviceManager->get( 'Zend\Db\Adapter\Adapter' ),
    'table' => 'COMPANY',
    'field' => 'NAME',
    'message' => 'The company name already exists'
);

您必须将其附加到所需的输入,并且该消息将与之相关。