このヘルプのおかげで、変数ラベルを含むフォームを作成できます。今、そのようなフォームのコレクションを作成したいのですが、それはできません。
正確に:私は MyField クラスを持っています:
class MyField {
protected label;
protected userAnswer;
public function setLabel($label){...}
public function getLabel(){...}
public function setUserAnswer($answer){...}
public function getUserAnswer(){...}
}
MyFieldType クラスもあります。
class MyFieldType extends AbstractType{
public function buildForm(FormBuilderInterface $builder, array $options){
$myField = $options['myField'];
$builder->add('userAnswer', 'text', array('label' => $myField->getLabel()));
}
public function getDefaultOptions(array $options){
return array('data_class' => '...\MyField',
'myField' => null);
}
}
そして、コントローラーで:
public function MyAction(Request $request){
...
$myField = new MyField();
...
$form = $this->createForme(new MyFieldType(), $myField, array('myField' => $myField));
...
}
以上で、フィールドのラベルは $myField->label です。
今、私はいくつかの MyFields を持つフォームを作成したい: 私はクラス MyForm を持っています
class MyForm {
protected myFields; // array of MyField
public function setMyFields...
public function getMyFields...
public function addAField...
}
そして、フィールド ラベルを $myField->label として使用したいと考えています。では、どうすれば MyFormType を定義できますか?
私は次のようなものを試しました:
class MyFormType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options){
$myFields = $options['myFields'];
$builder->add('myFields', 'collection',
array('type' => new MyFieldType(),
'options' => array('myField' => $myFields[0])));
}
それは機能します(もちろん、すべてのフィールドに同じラベルが付いていますが、それは望ましくありません)が、各 MyFieldType に独自の MyField を与える方法がわかりません...
何か案が ?