2013-06-20 18 views
9

mam BaseEntity klasa:Symfony2 Zastąp Ograniczenia

class BaseEntity 
{ 
    /** 
    * The name. 
    * 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255, unique=true, nullable=false) 
    * @Assert\Length(min=2, max=255, minMessage="default.name.short", maxMessage="default.name.long") 
    * @Assert\NotBlank(message = "default.name.not_blank") 
    */ 
    private $name; 
} 

i

class UserEntity extends BaseEntity 
{ 
    /** 
    * {@inheritDoc} 
    * 
    * @Assert\Length(min=2, max=255, minMessage="user.name.short", maxMessage="default.name.long") 
    * @Assert\NotBlank(message = "user.name.not_blank") 
    */ 
    private $name; 
} 

Teraz kiedy rozpocząć nowy UserEntity do postaci z długiej lub krótkiej nazwy Symfony daje mi 2 błędy: (do długo :)

  • default.name.long
  • user.name.long

Ale chcę pokazać tylko jeden błąd, więc: - user.name.long

np Chcę ręcznym, ale nie dodać kolejną jedną

+3

co wiem cann't przesłonić walidacji zdefiniowane dla klasy nadrzędnej. Najlepszym sposobem obejścia tego problemu jest dodanie grupy walidacyjnej do walidatorów, z którymi zostanie zatwierdzona jednostka. –

+0

Również nie znaleziono żadnego innego sposobu –

Odpowiedz

0

Jeśli jesteś zadowolony założyć przynajmniej niektóre z zasad walidacji poprzez plik YAML zamiast adnotacji, można zastąpić ustawienia walidacji klasy bazowej bez konieczności edycji samego pliku klasy.

Plik YAML będzie wyglądać mniej więcej tak i musiałby być w takim miejscu jak src/YourApp/YourBundle/Resources/config/validation.yml być zabierani automatycznie:

BaseEntity: 
    properties: 
     name: 
      - NotBlank: 
       message: user.name.not_blank 
      - Length: 
       min: 2 
       minMessage: user.name.short 
       max: 255 
       maxMessage: default.name.long 

Jeśli chcesz umieścić plik weryfikacyjny w niestandardowym miejscu, zobacz https://stackoverflow.com/a/24210501/328817