9

我有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
  • 用户名.long

但我希望它只显示一个错误,所以: - user.name.long

例如,我想覆盖,但不要添加另一个

4

3 回答 3

1

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

关于这个特性有一个很好的文档:

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

于 2018-01-11T22:00:55.773 回答
0

Maybe a Custom Validation Constraint could help you if you could (depending of your application logic) remove those two validations and make your own.

Something like this maybe?

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

于 2013-07-08T05:13:42.717 回答
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

于 2015-03-31T08:12:02.740 回答