Symfony2覆盖约束

时间:2013-06-20 15:46:47

标签: 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", 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

e.g。我想覆盖,但不要添加另一个

3 个答案:

答案 0 :(得分:0)

如果可以(根据您的应用程序逻辑)删除这两个验证并制作自己的验证,也许自定义验证约束可以帮助您。

这样的事可能吗?

http://symfony.com/doc/current/cookbook/validation/custom_constraint.html

答案 1 :(得分:0)

如果您乐意通过YAML文件而不是注释来设置至少一些验证规则,则可以覆盖基类的验证设置,而无需编辑类文件本身。 / p>

您的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

答案 2 :(得分:0)

我认为您正在寻找验证组。因此,您可以将验证规则分成几组。

有关此功能的优秀文档:

http://symfony.com/doc/current/validation/groups.html