2016-04-20 2 views
1

У меня есть ситуации, когда ограничение проверки внутри классов сущностей игнорируются ...Symfony2/3 Дети Entity Constraint Утверждайте игнорировало

Это одна не работает (который является детьми ActivityField Entity):

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

в то время как это один (который является автономным, не имеет никакого отношения к другим лицам) работы:

<?php 

namespace XXX\LanguagesBundle\Entity; 

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

/** 
* @ORM\Entity(repositoryClass="XXX\LanguagesBundle\Repository\LanguagesRepository") 
* @ORM\HasLifecycleCallbacks 
* @ORM\Table(name="languages") 
* 
* @UniqueEntity(fields="name") 
* @UniqueEntity(fields="iso") 
*/ 
class Languages extends AbstractEntity 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(name="name", type="string", unique=true) 
    * @Assert\NotBlank() -----> this one here !!! 
    * @Assert\Length(
    *  min=2, 
    *  minMessage="validator.minimum.2.characters" 
    *) 
    */ 
    protected $name; 

Если я добавить ограничение в FormType то все нормально и работает, но я не хотите иметь это и хранить все в файле Entity в виде аннотации. В моей конфиге у меня есть

framework: 
    validation:  { enable_annotations: true } 
+0

В аннотацию все ок , В каком режиме вы работаете (prod, dev)? Попробуйте очистить кеш (аннотация будет сохранена после полного анализа)? – ZhukV

+0

Я в dev env. Я просто очистил (жесткий удалить) кеш, перезапустил сервер, очистил redis все тот же ... может быть, какой-то конфиг пропал? хотя Языки работает нормально ... –

+2

Является ли сущность частью другого родительского объекта? В противном случае вам нужно добавить '@Assert \ Valid()' в аннотацию родительских отношений. – Rvanlaak

ответ

1

Чтобы «пройти» проверку на дочерние формы, вам нужно добавить @Assert\Valid в родительский тип.

Так связано с объектом Doctrine, если ActivityFieldLanguages является дочерним объектом, допустим, ActivityField, то родитель должен отметить это отношение для проверки.

/** 
* @var ActivityFieldLanguages[] $activityFieldLanguages 
* @Assert\Valid() 
*/ 
protected $activityFieldLanguages; 

Если вы хотите сделать это прямо в FormType, следует добавить, что же ограничение на (возможно) CollectionType:

$formBuilder->add('activityFieldLanguages', CollectionType::class, array(
    // ... 
    'constraints' => new Valid() 
); 

Для получения дополнительной информации: http://symfony.com/doc/current/reference/constraints/Valid.html

0

Может быть у вас есть группы проверки и «имя» не входят в этой группе, что группа, которую вы могли бы быть использованы в вашей форме. Это может привести к таким логическим ошибкам.

Смежные вопросы