2016-03-11 97 views
1

我正在使用symfony2驗證程序來驗證表單和API POST請求。在驗證程序中使用約束

我已經作出了驗證這樣的:

public function validate($content, Constraint $constraint) 
{ 
    if (in_array($constraint->type, self::DNS_TYPE, true) === false) { 
     $this->context->buildViolation('This DNS type is not valid.') 
      ->atPath($constraint->type) 
      ->addViolation(); 
    } 

    switch ($constraint->type) { 
     case 'A': 
      $contentConstraint = new Assert\Ip(['version' => '4']); 
      break; 
     case 'AAAA': 
      $contentConstraint = new Assert\Ip(['version' => '6']); 
      break; 
     case 'CNAME': 
     case 'NS': 
     case 'MX': 
      $contentConstraint = new Assert\Regex(['pattern' => '/^[[:alnum:]-\._]+$/u']); 
      break; 
     default: 
      $contentConstraint = false; 
      break; 
    } 

    // This part don't work 
    if ($this->validate('1.1.1.1', $contentConstraint)) { 
     $this->context->buildViolation('his value is not correct.') 
      ->atPath($content) 
      ->addViolation(); 
    } 
} 

第一個回調,並與我的表單開關的工作,但在使用第二個回調,symfony會返回一個錯誤

選項「類型「在約束中不存在Symfony \ Component \ Validator \ Constraints \ Ip

我不明白我的約束有什麼問題。 爲什麼這個錯誤說我的IP約束沒有type選項?

我該如何解決這個問題? 我也許不能在驗證器中使用ip約束?

感謝

回答

1

約束http://api.symfony.com/2.3/Symfony/Component/Validator/Constraints/Ip.html沒有type財產。 如果你需要它,你應該延長Symfony\Component\Validator\Constraints\Ip

+0

我不需要這個屬性,我甚至不知道這個屬性來自哪裏。當我在另一個班級使用這個功能時,這個工作很好。我不明白爲什麼只有在這個班上我有這個錯誤 –