Symfony2/3子实体约束断言已忽略

Symfony2/3子实体约束断言已忽略,symfony,doctrine-orm,Symfony,Doctrine Orm,我有一种情况,实体类中的验证约束被忽略 此项不起作用,它是ActivityField实体的子项: <?php namespace XXX\ActivityFieldsBundle\Entity; use Doctrine\ORM\Mapping as ORM; use XXX\DatabaseBundle\Entity\AbstractEntity; use Symfony\Component\Validator\Constraints as Assert; /** * @ORM\E

我有一种情况,实体类中的验证约束被忽略

此项不起作用,它是ActivityField实体的子项:

<?php
namespace XXX\ActivityFieldsBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use XXX\DatabaseBundle\Entity\AbstractEntity;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity(repositoryClass="XXX\ActivityFieldsBundle\Repository\ActivityFieldLanguagesRepository")
 * @ORM\HasLifecycleCallbacks
 * @ORM\Table(name="activity_field_languages")
 */
class ActivityFieldLanguages extends AbstractEntity
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="name", type="text")
     * @Assert\NotBlank()    ----> !!! this one here !!!
     */
    protected $name;

可能您有验证组,而“name”不包括在该组中,您可能会在表单中使用该组。这可能会导致此类逻辑错误。

可能是因为您有验证组,而“名称”不包括在该组中,您可能会在表单中使用该组。这可能会导致此类逻辑错误。

要通过对子表单类型的验证,需要将@Assert\Valid添加到父类型

因此与条令实体相关,如果ActivityFieldLanguages是ActivityField的子实体,那么父实体应该标记该关系以进行验证

/**
 * @var ActivityFieldLanguages[] $activityFieldLanguages
 * @Assert\Valid()
 */
protected $activityFieldLanguages;
如果要直接在FormType中执行此操作,则应将相同的约束添加到可能的CollectionType:


有关详细信息:

要通过对子formtypes的验证,需要将@Assert\Valid添加到父类型

因此与条令实体相关,如果ActivityFieldLanguages是ActivityField的子实体,那么父实体应该标记该关系以进行验证

/**
 * @var ActivityFieldLanguages[] $activityFieldLanguages
 * @Assert\Valid()
 */
protected $activityFieldLanguages;
如果要直接在FormType中执行此操作,则应将相同的约束添加到可能的CollectionType:


有关详细信息:

在注释中,所有操作都正常。你是以哪种方式工作的prod,dev?尝试清除缓存完成解析后注释将被缓存?我在dev env中。我刚刚清除了硬删除缓存,重新启动服务器,清除了redis还是一样。。。也许有一些配置丢失了?虽然语言工作得很好,但实体是另一个父实体的一部分吗?否则,您需要将@Assert\Valid添加到父关系批注中。@Rvanlaak就是这样。请添加它作为一个答案,我会接受它!我是ActivityField的孩子。根据你的回答,我还对问题进行了编辑,使其更加清晰!这是一个很难调试的问题,我已经在我的答案中添加了更多的信息。你是以哪种方式工作的prod,dev?尝试清除缓存完成解析后注释将被缓存?我在dev env中。我刚刚清除了硬删除缓存,重新启动服务器,清除了redis还是一样。。。也许有一些配置丢失了?虽然语言工作得很好,但实体是另一个父实体的一部分吗?否则,您需要将@Assert\Valid添加到父关系批注中。@Rvanlaak就是这样。请添加它作为一个答案,我会接受它!我是ActivityField的孩子。根据你的回答,我还对问题进行了编辑,使其更加清晰!这是一个很难调试的问题,我在下面的答案中添加了更多的信息
/**
 * @var ActivityFieldLanguages[] $activityFieldLanguages
 * @Assert\Valid()
 */
protected $activityFieldLanguages;
$formBuilder->add('activityFieldLanguages', CollectionType::class, array(
    // ...
    'constraints' => new Valid()
);