2014-09-10 56 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