2014-02-25 13 views

回答

1

您可以創建一個類約束驗證as per documentation,如:

class ProtocolClassValidator extends ConstraintValidator 
{ 
    public function validate($protocol, Constraint $constraint) 
    { 
     if ($protocol->getFoo() != $protocol->getBar()) { 
      $this->context->addViolationAt(
       'foo', 
       $constraint->message, 
       array(), 
       null 
      ); 
     } 
    } 
} 
+0

你快了24秒。儘管你的回答缺少'getTargets()'方法。反正+1 :) – nifr

3

您可以定義一個類級別的定製約束有點像這個實現自己的目標:

use Symfony\Component\Validator\Constraint; 
use Symfony\Component\Validator\ConstraintValidator; 

class PackageSizeValidator extends ConstraintValidator 
{ 

    public function validate($object, Constraint $constraint) 
    { 
     $packageSize = $object->getWidth() * $object->getHeight() * $object->getLength(); 

     if ($packageSize <= 30) { 
      return; 
     } 

     $this->context->addViolationAt(
      'length', 
      'Package size exceeds 30.', 
      array(), 
      null 
     ); 

     // ... 
    } 

    public function getTargets() 
    { 
     return self::CLASS_CONSTRAINT; 
    } 

    public function validatedBy() 
    { 
     return 'package_size'; 
    } 
} 

現在將其定義爲服務並將其標記爲驗證器。

# app/config/config.yml 

services: 
    validator.package_size: 
     class: Vendor\YourBundle\Validation\Constraints\PackageSizeValidator 
     tags: 
      - { name: validator.constraint_validator, alias: package_size } 
+0

+ 1ed back,你的回答比較完整 - 我只是從文檔粘貼一段摘錄:)) – moonwave99