繁体   English   中英

在symfony表单类型中使用自定义约束/验证器

[英]Use a custom constraint/validator in symfony form type

我正在尝试在表单类型中使用自定义工作验证器,但出现此错误:

没有为约束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),
    ]);
};

但是我收到上面写的错误。 我不知道如何解决此问题,如果我使用正确的方式在表单类型中使用自定义约束验证器,我也不知道。

谢谢你的帮助

尝试

  $form->add('content', null, [
        'label'                 => 'form.content',
        'translation_domain'    => 'global',
        'constraints'           => new DnsContent(),
    ]);

当不传递关联数组但getDefaultOption()返回null时,抛出ConstraintDefinitionException

您可以添加自定义选项作为约束字段

class DnsContent extends Constraint

    {
        public $message = 'fail';

        public $type;

        /**
         * {@inheritdoc}
         */
        public function validatedBy()
        {
             return 'dns_content';
        }
    }

现在您可以在数组中传递此选项

new DnsContent(['type' => $type])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM