是否可以检查另一个实体中是否已存在某个值?因此,当用户名已存在时,新用户无法获得该用户名。在学说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
的类别实体。如何检查此约束对新(类别)实体是否有效?
答案 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'
);
您必须将其附加到所需的输入,并且该消息将与之相关。