2016-03-08 128 views
1

我想在我的表单类型使用自定义的验证工作,但我得到这个错误:symfony的表单类型使用自定义约束/验证

没有默认选项配置为约束的appbundle \验证\约束\ 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), 
    ]); 
}; 

但是我得到了上面写的错误。 我不明白如何解决这个问题,如果我使用正确的方式在表单类型中使用自定义约束验证器。

感谢您的帮助

回答

3

尝试

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

抛出ConstraintDefinitionException如果不通过一个 关联数组,但getDefaultOption()返回null

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

class DnsContent extends Constraint 

    { 
     public $message = 'fail'; 

     public $type; 

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

现在你可以通过在阵列

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

这个选项我没有错误了,但我的验证不使用 –

+0

valdate方法不叫? –

+0

哼哼是的,但我需要通过'type'来使用我的开关盒 –