symfony 2.0 では、フォームで 1 対 1 の関連付けを使用してドロップダウン リストを作成する方法は? 良い例を教えてください。
2 に答える
私が理解できる方法であなたの質問に答えようとします。Faculty
単一のオブジェクトにバインドされたオブジェクトがあるとしましょうUniversity
。したがって、学部の作成または編集に使用するフォームでは、データベース内のすべての大学のコンボ ボックスを表示し、ユーザーはその中から 1 つを選択します。まさにこれを行う 1 つの特別な Symfony フィールド タイプがあります: エンティティ タイプです。以下は、教職員フォームを作成するために使用するオブジェクトで使用buildForm
するメソッドのコードです。FacultyType
// Application\AcmeBundle\Form\Type\FacultyType
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name');
$builder->add('university', 'entity', array(
// The class of the entity used as a combo box item
'class' => 'AcmeBundle:University',
// The property of the entity displaying the entity as text
'property' => 'name',
// The query builder used to populate the combo box, accepts
// a QueryBuilder object or a \Closure like below
'query_builder' => function(EntityRepository $repository) {
// This will return a query builder selecting all universities
return $repository->createQueryBuilder('u');
}
));
}
注: エンティティ フィールド タイプに設定できるプロパティは他にもあります。詳細については、このページを参照してください。
レンダリングすると、データベースに設定したすべての大学のコンボ ボックスが表示されます。ユーザーがフォームを保存すると、選択した大学がセッターを介してフォームにバインドされた教員オブジェクトに割り当てられます。おそらく、コンボ ボックスの代わりにドロップダウン リストをレンダリングできます。複数のエンティティを選択する必要がある'multiple'
場合は、フィールド タイプ エンティティのオプションが役立ちます。
そうは言っても、私が示した例は1対1の関係ではなく、オブジェクトの多対1とFaculty
オブジェクトの1対多ですUniversity
。University
1 対 1 の関係は、 aが一意の を持つ関係のようなものになりますAddress
。この場合、大学が持つことができる住所は 1 つだけであるため、コンボ ボックスは役に立ちません。そのため、サブフォームの方が適しています。アドレスが多い場合は、大学と学部の関係のように、1 対多の関係になります。
これがあなたの質問に正しく答えるかどうかはわかりませんが、最終的な解決策につながることを願っています.
よろしく、マット
Symfony2 ではエンティティ フィールド タイプを使用する必要があります。良い例がhttp://symfony.com/doc/current/reference/forms/types/entity.htmlにあります