2014-09-10 70 views
1

我有两个实体文件一个为Activite.php,另一个为Mesurage.php。 现在我想显示一个Activite表单,其中包含3个字段typeActivite,emplacement和mesurage。该mesurage将是一个选择,将从mesurage表中获取数据。这里要说的是我里面写Activite.php创建many_to_one领域mesurage_id以Symfony2形式显示多对一的字段?

/** 
* @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

如果你想即使mesurage显示一个表单,你必须看看embed form

所以,基本上,你必须创建一个FormTypemesurage(称之为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

+0

谢谢你你的回复,但我已经做到了这个解决方案没有成功 类型集合是为一对多关系而设计的,不是多对一的! – 2014-09-11 13:18:22

+0

@ YassineEch-Charafi:?我从你的映射中看到有多对一的时尚(但是,不是那种重要的,因为你可以绕过我想) – DonCallisto 2014-09-11 13:24:15

+0

我不明白你的意思!但在JQuey代码我没有什么可显示的! – 2014-09-11 13:38:48

相关问题