まず、私がsymfonyフォームのアマチュアであることを認めましょう。どんな助けでも本当に感謝しています。私は実際のコードを共有することは許されていないので、私はユースケースを示すためにいくつかのサンプルコードを使用しています。下記のsymfonyで複数のフォームタイプを使用してデータクラスを持つ単一のフォームを作成する方法
は、ユースケース、
である私はtestEntityと呼ばれるエンティティ、私はformType1と呼ばれるフォームタイプを持っている
class testEntity {
private $property1;
private $property2;
private $property3;
//with setters and getters
}
、
class formType1 extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('property2')
->add('property3)
;
}
public function buildView() {
// Code that create view vars
}
}
を持っていると私は、フォームタイプを持っていますtestEntityの場合、
class testEntityType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('property1)
....
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults([
'data_class' => testEntity::class
]);
}
}
formType1は、outデータクラスを持つフォームタイプであり、独自のテンプレートであり、単独で使用されます。私がしたいのは、testEntityのformType1を再利用することです。formType1にはtestEntityのプロパティにマップされるフィールドがあります。これにより、フォームデータとともにtestEntityオブジェクトを取得できるようになり、最終フォームでformType1のビューを取得できます。
私は十分質問を額装していない場合、フォームは、フォームからのデータを事前に
謝罪とI GET $ testEntityを送信したときに、なるようにコントローラのアクションは、この、
$testEntity = new testEntity();
$form = $this->createForm(PostType::class, $testEntity);
を持っています理解されるべきである。
はfalse
にオプションや敷石mapped
を介してデータを渡され
class testEntityType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('property1')
->add('formType1', formType1::class, [
'mapped' => false,
'data' => $options['data']
])
....
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults([
'data_class' => testEntity::class
]);
}
}
、これを行うことによって、この作業を手に入れました。
感謝を付けろ。あなたがあなたのアップデートで言及したように 'formType1'を子フォームの名前として使用すると、' getFormType1() 'や' testEntity'の 'formType1'のようなプロパティが存在しないというエラーが出力されます。 –
このフォームを使用してコントローラアクションで質問を更新できますか?ビルダーに 'data_class'を追加するとどうなりますか(編集を参照) –
コントローラーアクションのコードで質問を更新しました。また、data_classをビルダに渡すと、次のようなエラーが返されます。 'プロパティ" formType1 "と" getFormType1() "、" formType1() "、" isFormType1() "のいずれも使用できません、 "hasFormType1()"、 "__get()"が存在し、 "Entity \ testEntity"クラスのパブリックアクセスを持っています data_classを渡しているので、フォームはデータクラスのプロパティにマップされた名前を持つ子'formType1'は' testEntity'のどのプロパティにもマッピングされません。 –