次に、 Symfony 2フレームワークに基づいてプロジェクトを作成するすべての人々の生活を楽にします。
Symfony 2には、エンティティからフォームを作成するための優れたツールと、さらに興味深いことに、 フォームを組み合わせたものがあります 。
そのため、そのような(統一された)形式のエンティティ(オブジェクト)からデフォルト値を設定する必要がある場合、あなた(私のように)はインターネットをさまよい、この問題の解決策を探します。 ドキュメントにはないようです(いずれにしても、私はそれを見つけませんでした)。
そして...私は次のように(コントローラーで)その場でフォームを生成しました:
$client = $this->getDoctrine()->getRepository('CarrierUserBundle:Client') ->findOneBy(array('id' => (int) $id)); $form = $this->createFormBuilder()->add('user', new UserType()) ->add('client', new ClientType()) ->getForm();
この場合、UserオブジェクトとClientオブジェクトからデフォルト値を設定できませんでした(これらのオブジェクト間に「User one to many Clients」が接続されていることにも注意してください)。 長い検索の後、問題の解決策の半分しか見つかりませんでしたが、残りは自分で管理しました。 したがって、ソリューション自体:
$client = $this->getDoctrine()->getRepository('CarrierUserBundle:Client') ->findOneBy(array('id' => (int) $id)); $form = $this->createForm(new Form\ClientType(), $client) ->add($this->createForm(new Form\UserType()));
createFormBuilderの代わりに、フォームのタイプとオブジェクトが転送されるcreateFormを直接使用することがわかります(オブジェクトからはデフォルト値が使用されます)。 その後、別のメソッドがaddメソッドを使用して同じフォームにアタッチされますが、 $ユーザーはもう転送されません。 $ clientにはgetUser()メソッドがあります。このため、エンティティ間の関係について説明しました。
誰かの時間を節約したいと思います。 Symfony 2を使用して、あなたの決定について話します。そうすれば、私たち全員が仕事をするのが簡単になります=)
参照: Symfony 2のSluggable、Timestampableなど