【发布时间】:2016-01-19 13:11:03
【问题描述】:
我在仅对一个关联实体应用验证时遇到了一些困难。
所以我有两个实体,News 和 NewsTranslation。一条新闻可以翻译成多种语言。但我只想在语言环境为 en 时应用验证。
// AppBundle/Entity/News.php
class News
{
use ORMBehaviors\Translatable\Translatable;
use ORMBehaviors\Timestampable\Timestampable;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var int
*
* @ORM\Column(name="status", type="smallint")
* @Assert\NotBlank
*/
private $status;
...
}
// AppBundle/Entity/NewsTranslation.php
class NewsTranslation
{
use ORMBehaviors\Translatable\Translation;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255, nullable=true)
* @Assert\NotBlank
* @Assert\Length(max = 255)
*/
private $title;
/**
* @var string
*
* @ORM\Column(name="text", type="string", nullable=true)
* @Assert\NotBlank
*/
private $text;
}
# AppBundle/Resources/config/validation.yml
AppBundle\Entity\News:
properties:
translations:
- Valid: ~
我尝试将Closure 用于validation_groups 表单选项。但看起来 Symfony 对 News 实体进行验证,Valid 约束在 NewsTranslation 上应用相同的组。
我知道我可以使用Callback 约束,但这意味着我自己重做NotBlank、Length 和其他现有约束。如果可能的话,我想避免它。
编辑:
我正在使用 Symfony 2.8.*
我尝试使用en 验证组。但看起来验证是在News 实体和validation_groups 上启动的。并且在Valid 约束下,en 验证组用于验证NewsTranlation。因此,在这种情况下,即使是 en 或 fr 翻译,该组也不会改变任何内容。
我还尝试通过@Assert\Callback 使用validation medatada 或通过将loadValidatorMetadata 方法用于NewsTranslation 实体。并且问题保持相似。我无法对特定的集合实体应用约束。
【问题讨论】:
标签: validation symfony