在Symfony2表单中显示多对一字段?

时间:2014-09-10 21:24:39

标签: symfony doctrine-orm

我有两个实体文件,一个是Activite.php,另一个是Mesurage.php。 现在我想显示一个激活形式,其中包含3个字段类型的活动,安置和消息。 mesurage将是一个从mesurage表中获取数据的选择。这是我在Activite.php中编写的代码,用于为mesurage_id创建many_to_one字段

/**
 * @ORM\Id
 * @ORM\ManyToOne(targetEntity="GestionEnvironnementale\ISO14001Bundle\Entity\Mesurage")
 */
private $mesurage;

以下是我的表单生成代码:

class ActiviteType extends AbstractType {
     public function buildForm(FormBuilderInterface $builder, array $options) {
         $builder
             ->add('typeActivite'),
             ->add('emplacement'),
             ->add('mesurage', 'entity', array('class' => 'ISO14001Bundle:Mesurage'));
     }
}

这是我的表单代码:

<div class="well">
<form method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}
    <br/>  <input type="submit" value="Envoyer" class="btn btn-primary" />
</form>

<script src="{{ asset('js/jquery-2.1.1.min.js') }}"></script>
<script type="text/javascript">
$(document).ready(function() 
{
var $container3 = $('div#gestionenvironnementale_iso14001bundle_activitetype_activiteMesurage');
var $lienAjout3 = $('<a href="#" id="ajout_mesurage" class="btn">Ajouter un mesurage</a>');
$container3.append($lienAjout3);
$lienAjout3.click(function(h) {
        ajouterMesurage($container3);
        h.preventDefault();
        return false;
    });
var index3 = $container3.find(':input').length;
    if (index3 == 0) {
        ajouterMesuragePolluant($container3);
    } else {
        $container3.children('div').each(function() {
            ajouterLienSuppression3($(this));
        });
    }
function ajouterMesurage($container3) {
        var $prototype3 = $($container3.attr('data-prototype').replace(/__name__label__/g, 'Mesurage n°' + (index3+1))
                .replace(/__name__/g, index3));
        ajouterLienSuppression3($prototype3);
        $container3.append($prototype3);
        index3++;
    }
function ajouterLienSuppression3($prototype3) {
        $lienSuppression3 = $('<a href="#" class="btn btn-danger">Supprimer</a>');
        $prototype3.append($lienSuppression3);
        $lienSuppression3.click(function(h) {
            $prototype3.remove();
            h.preventDefault();
            return false;
        });
    }
 });

代码工作得很好,但我不想显示Mesurage列表,我想显示Mesurage的形式添加新的!!

1 个答案:

答案 0 :(得分:2)

如果您想要显示mesurage的表单,则需要查看embed form

所以,基本上,您必须为FormType创建一个mesurage(称之为MesurageFormType)并按如下方式修改ActiviteType

class ActiviteType extends AbstractType {
     public function buildForm(FormBuilderInterface $builder, array $options) {
         $builder
             ->add('typeActivite'),
             ->add('emplacement'),
             ->add('mesurage', 'collection', array(
                 'type'      => new MesurageFormType(),
                 'allow_add' => true,));
   }
}

这应该没问题,但如果你想以不同的方式呈现你的表格,你应该使用prototype and jquery