доктрина возвращает неверные данные после нормализованных данных формы - PullRequest
0 голосов
/ 15 февраля 2019

Я работаю над проектом Symfony 3.4 и у меня проблема с формой и доктриной.У меня есть 3 лица.Первый «Equipe», второй «Equipe_Couleur» и последний «Couleurs».Эти сущности являются отношениями «один ко многим, многие к одному».Я не использую «многие ко многим», потому что «Equipe» может иметь много раз одного цвета.Проблема возникает, когда пользователь редактирует «Equipe» и меняет цвет.Цвета меняются при отправке формы.Я помещаю события PRE_SUBMIT в форму «CouleursType».В этом случае я делаю findAll.При первом вводе в коде findall возвращает хорошие данные, но во второй раз данные, возвращаемые findall, не являются хорошими.У меня два раза цвет «Jaune».

Первое изображение с хорошими данными и второе с плохими данными.[1] Становится «Jaune».Это не хорошо Хорошие цвета Плохие цвета

Я думал, что обойти это.Но это не хорошее решение, потому что это может случиться где угодно.Итак, мне нужно понять, почему это происходит и как это исправить.Я попытался очистить доктрину и ничего не изменить.

class CouleursType extends AbstractType
{
    private $idCouleurPRE_SUBMIT;
    private $repoCouleur;
    private $arrayCouleurs = null;
    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->repoCouleur = $entityManager->getRepository('QcRacesInscriptionBundle:Couleurs');
    }
    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder->addEventListener(\Symfony\Component\Form\FormEvents::PRE_SUBMIT, function (\Symfony\Component\Form\FormEvent $event)
      {
          $data = $event->getData();
          $this->idCouleurPRE_SUBMIT = $data['couleur'];
          $tempArray = $this->repoCouleur->findAll();
          if(!isset($this->arrayCouleurs))
          {

            $this->arrayCouleurs = Array();
            foreach($tempArray as $couleur)
            {
                $tempCouleur = new Couleurs();
                $tempCouleur->setId($couleur->getId());
                $tempCouleur->setCouleur($couleur->getCouleur());

                $this->arrayCouleurs[] = $tempCouleur;
            }
          }
        });  
        $builder->addEventListener(\Symfony\Component\Form\FormEvents::SUBMIT, function (\Symfony\Component\Form\FormEvent $event){
           $couleur = $event->getData();
            if($this->idCouleurPRE_SUBMIT != strval($couleur->getId()))
            {
                //$t = $this->repoCouleur->findAll();
                //$couleur = $this->repoCouleur->findOneById($this->idCouleurPRE_SUBMIT);
                foreach($this->arrayCouleurs as $couleur)
                {
                    if(strval($couleur->getId()) == $this->idCouleurPRE_SUBMIT)
                    {
                        $event->setData($couleur);
                    }
                }
            }
        });  


        $builder->add('couleur', EntityType::class, array('class' =>                   Couleurs::class, 'choice_label' => 'couleur', 'choice_value' => 'id', 'multiple' => false, 'inherit_data' => false, 'label' => 'Couleur *'));
    }
    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'QcRaces\InscriptionBundle\Entity\Couleurs',
            'validation_groups' => ['Default']

        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'qcraces_inscriptionbundle_couleurs';
    }

}

Спасибо

...