我在一个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';
}
}
谢谢