我尝试在我的表单类型中使用自定义工作验证器,但是我收到此错误:
没有为约束AppBundle \ Validator \ Constraints \ DnsContent配置默认选项
我做了这个约束+验证器:
// My constraint
/**
* @Annotation
*/
class DnsContent extends Constraint
{
public $message = 'fail';
/**
* {@inheritdoc}
*/
public function validatedBy()
{
return 'dns_content';
}
}
// My validator
class DnsContentValidator extends ConstraintValidator
{
public function validate($type, Constraint $constraint)
{
switch ($type) {
case 'A':
return new Assert\Ip(['version' => '4']);
break;
case 'AAAA':
return new Assert\Ip(['version' => '6']);
break;
case 'CNAME':
case 'NS':
case 'MX':
return new Assert\Regex(['pattern' => '/^[[:alnum:]-\._]+$/u']);
break;
default:
return false;
break;
}
}
}
我试图在我的表单类型中使用它
$contentConstraints = function (FormInterface $form, $type) {
$form->add('content', null, [
'label' => 'form.content',
'translation_domain' => 'global',
'constraints' => new DnsContent($type),
]);
};
但是我得到了上面写的错误。 我不明白如何解决这个问题,如果我使用正确的方法在表单类型中使用自定义约束验证器。
感谢您的帮助
答案 0 :(得分:4)
尝试
$form->add('content', null, [
'label' => 'form.content',
'translation_domain' => 'global',
'constraints' => new DnsContent(),
]);
throws ConstraintDefinitionException当你没有传递时 关联数组,但getDefaultOption()返回null
您可以将自定义选项添加为约束字段
class DnsContent extends Constraint
{
public $message = 'fail';
public $type;
/**
* {@inheritdoc}
*/
public function validatedBy()
{
return 'dns_content';
}
}
现在你可以在数组中传递这个选项
new DnsContent(['type' => $type])