2013-06-20 91 views
9

我有BaseEntity類:Symfony2的覆蓋約束

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; 
} 

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; 
} 

現在,當我發佈一個新UserEntity與長或短名稱形式的Symfony給了我2個錯誤:(用於長:)

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

但我想它只顯示一個錯誤,所以: - user.name.long

例如我想覆蓋,但不要添加另一個

+3

正如我知道你水溼覆蓋的父類中定義的驗證。 最好的解決方法是將驗證組添加到您將與之進行實體驗證的驗證方。 –

+0

也沒有找到任何其他方式 –

回答

0

如果你感到快樂建立至少你的一些驗證規則通過YAML文件,而不是註解,你可以無需編輯類文件本身覆蓋基類的驗證設置。

你的YAML文件看起來像這樣,將需要在一個位置,就像src/YourApp/YourBundle/Resources/config/validation.yml被自動拾取:

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

如果你想要把你的驗證文件中的一個非標準的位置,請參閱https://stackoverflow.com/a/24210501/328817