形式归一化数据后,学说返回不良数据

时间:2019-02-15 15:31:10

标签: php symfony doctrine symfony-3.4

我在一个Symfony 3.4项目中,但是在形式和学说上存在问题。我有3个实体。第一个«Equipe»,第二个«Equipe_Couleur»,最后一个«Couleurs»。这些实体是一对多的一对多关系。我不使用“多对多”,因为«Equipe»可以具有很多次相同的颜色。用户编辑«设备»并更改颜色时会发生问题。提交表单时颜色会改变。我以“ CouleursType”形式放置了PRE_SUBMIT事件。在这种情况下,我将创建findAll。第一次输入代码时,findall返回的数据很好,但是第二次,findall返回的数据不好。我有两次“ Jaune”颜色。

第一个图像具有良好的数据,第二个图像具有不良的数据。 [1]成为«Jaune»。这样不好 Good Colors Bad colors

我认为可以解决此问题。但这不是一个好的解决方案,因为这可能发生在任何地方。因此,我需要了解为什么会发生这种情况以及如何解决。我试图缓存清晰的教义,但没有任何变化。

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';
    }

}

谢谢

0 个答案:

没有答案