2015-05-30 46 views
0

對象如何,我可以得到的屬性,我用它來建立這種形式: 控制器代碼在Form類symfony的:獲取對象形式

$assistance1 = new Assistance(); 
$assistance1->setEtudiant($etudiant1); 
$form = $this->get('form.factory')->create(new AssistanceType(), $assistance1); 

buildform功能

/** 
* @param FormBuilderInterface $builder 
* @param array $options 
*/ 
public function buildForm(FormBuilderInterface $builder, array $options) 
{ 

    $builder 
     ->add('present', 'checkbox',array(
      'required' => false, 
     )) 
    ; 
} 
+0

你能更具體嗎? – Jacob

+0

我想在buildForm函數上使用$ assistance1屬性來爲複選框 定義一個標籤,如:$ myobject = $ builder-> get ???(); $ value = $ myobject-> getAttribute(); – hamza

回答

0

您可以添加$this->assistance1;到AssistenceType並做new AssistenceType($assistence1);但這是不好的設計imo。

class AssistenceType extends AbstractType 
{ 
    private $assistence1; 

    public function __construct($assistence1) 
    { 
     $this->assistence1 = $assistence1; 
    } 

    public function buidlForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('present', 'checkbox', array(
      'required' => false, 
      'label' => $this->assistence1->getEtudiant() 
     )); 
    } 
} 

,並使用它像這樣

$form = $this->get('form.factory')->create(new AssistanceType($assistence1), $assistance1); 
+0

我不能在這種情況下(形式徵收)這種解決方案: 公共職能buildForm(FormBuilderInterface $建設者,數組$選項) {$ 建設者 - >添加( 'contenu', '文本區域') - > add('date_seance','datetime') - > add('assistances','collection',array( 'type'=> new AssistanceType(), )) ; } 這是使用這種形式的其他形式 – hamza

+0

我可以在buildForm方法內使用'$ assistence = $ options-> getData()'。然後'label => $ assistence-> getEtudiant()'。 – Jacob

0

你應該記住,建築形式從它的數據分離。如果您需要根據其屬性更改表單,則需要實現不同類型的事件偵聽器或訂閱者。想想這樣:你只需要一個建造者的許多形式。

要在表單上實現監聽器或訂閱者,最有可能最容易首先將您的表單類型聲明爲服務,然後註冊您需要更改表單行爲的服務,並將其標記爲事件聽衆的形式。這些都是在文檔:)

然而,Symfony的表單組件往往是最複雜的一個,所以不要猶豫,澄清你的問題多一點,所以我可以更有效地幫助你。