0

单字段验证

是否可以检查一个值是否已经存在于另一个实体中?因此,当用户名已经存在时,新用户将无法获得该用户名。在原则 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,
                ),
            ),
        ),
 )));

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

多字段验证

目前我正在捕获 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。如何检查此约束是否对新(类别)实体有效?

4

1 回答 1

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'
);

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

于 2013-04-11T11:54:53.727 回答