Я работаю над проектом 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';
}
}
Спасибо