Php Symfony2覆盖约束

Php Symfony2覆盖约束,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我有BaseEntity课程: 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"

我有
BaseEntity
课程:

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

现在,当我将一个新的
UserEntity
以长或短名称发布到表单中时,Symfony给了我两个错误:(长:)

  • default.name.long
  • user.name.long
但我希望它只显示一个错误,因此: -user.name.long


e、 g.我想覆盖,但不要再添加一个

如果您可以(根据应用程序逻辑)删除这两个验证并创建自己的验证,那么自定义验证约束可能会对您有所帮助

也许是这样的


如果您愿意通过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

如果您想将验证文件放在非标准位置,请参见

我想您需要的是验证程序组。因此,您可以将验证规则分成多个组

有关此功能的文档非常丰富:


正如我所知,您不能覆盖为父类定义的验证。最好的解决方法是将验证组添加到您的Validatior中,您将使用该组进行实体验证。也没有找到任何其他方法
BaseEntity:
    properties:
        name:
            - NotBlank:
                message: user.name.not_blank
            - Length:
                min: 2
                minMessage: user.name.short
                max: 255
                maxMessage: default.name.long