symfony形式的动态选择区域
我想在表单中动态生成选择的内容 我有一个具有能力领域的Offre实体。每种能力都在一组称为“群体能力”的能力中 我想创建一个带有GroupeCompertences选择框的表单,它将为该组中的第二个能力选择框提供信息 以下是我的实体: 主任实体symfony形式的动态选择区域,symfony,doctrine,Symfony,Doctrine,我想在表单中动态生成选择的内容 我有一个具有能力领域的Offre实体。每种能力都在一组称为“群体能力”的能力中 我想创建一个带有GroupeCompertences选择框的表单,它将为该组中的第二个能力选择框提供信息 以下是我的实体: 主任实体 /** * Offre * * @ORM\Table(name="offre") * @ORM\Entity(repositoryClass="AppBundle\Repository\OffreRepository") */ class Of
/**
* Offre
*
* @ORM\Table(name="offre")
* @ORM\Entity(repositoryClass="AppBundle\Repository\OffreRepository")
*/
class Offre
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="titre", type="string", length=100)
*/
private $titre;
/**
* @var Competence
*
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Competence")
*/
private $competence;
//ALL GETTERS AND SETTERS ...
}
能力实体
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Competence
*
* @ORM\Table(name="competence")
* @ORM\Entity(repositoryClass="AppBundle\Repository\CompetenceRepository")
*/
class Competence
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="GroupeCompetences", inversedBy="competences")
*/
private $groupeCompetence;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=100)
*/
private $nom;
//ALL GETTERS AND SETTERS ...
}
提前感谢您的帮助!:=) 您需要javascript来实现这一点 首先渲染一个GroupeCompentences选择。您不需要使用formbuilder生成此操作,因为您只添加javascript操作。只要一根树枝就够了 第二,向控制器添加一个新操作,该操作将为您的第二次选择提供一个选项列表,其中包含一个给定组中的权限
第三,添加javascript,当组能力选择中的所选选项发生更改时,该javascript会向新操作发出ajax请求。我找到了解决方案。我必须使用表单事件。这是代码(也许它可以帮助某人…)
请看,这与示例中的情况不同,会议实体包含两个实体(医生和客户)。就我而言,我只有一个实体(能力)与一组能力相关。该团体与非官方实体没有联系。情况不一样(当然),但方法相似,有一些变化,你可以做你需要的。是的,我明白了。但是,即使不是表单的一部分(因为它不在实体中),您如何在表单中生成GroupCompetencies?谢谢谢洛。我想我知道怎么做第二和第三。但是我不明白你的第一。仅使用细枝渲染选择框是什么意思?谢谢
<?php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* GroupeCompetences
*
* @ORM\Table(name="groupe_competences")
* @ORM\Entity(repositoryClass="AppBundle\Repository\GroupeCompetencesRepository")
*/
class GroupeCompetences
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="Competence", mappedBy="groupeCompetence")
*/
private $competences;
/**
* @var string
*
* @ORM\Column(name="nom", type="string", length=100)
*/
private $nom;
//ALL GETTERS AND SETTERS ...
}
<?php
namespace AppBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Doctrine\ORM\EntityRepository;
use AppBundle\Entity\Offre;
class OffreType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('titre')
->add('competence')
->add('groupeCompetences', EntityType::class, array(
'class' => 'AppBundle:GroupeCompetences',
'choice_label' => 'nom',
'placeholder' => 'Choisissez un groupe de compétences',
))
}
}
class CompetenceChoisieType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('groupeCompetence', EntityType::class, array(
'class' => 'AppBundle:Sources\GroupeCompetences',
'choice_label' => 'nom',
'placeholder' => 'Tous les groupes de compétences',
))
->add('save', SubmitType::class);
$formModifier = function (FormInterface $form, GroupeCompetences $groupeCompetences=null){
$competences = null === $groupeCompetences ? array() : $groupeCompetences->getCompetences();
$form->add('competence', EntityType::class, array(
'class' => 'AppBundle:Sources\Competence',
'choice_label' => 'nom',
'placeholder' => 'Choisir une compétence',
'choices' => $competences,
));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier) {
// this would be your entity, i.e. CompetenceChoisie
$data = $event->getData();
$formModifier($event->getForm(), $data->getGroupeCompetence());
}
);
$builder->get('groupeCompetence')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$groupeCompetences = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $groupeCompetences);
}
);
}
}