Pull to refresh

Объединенные формы и значения по умолчанию

Symfony *
Здравствуйте.

Сейчас я бы хотел облегчить жизнь всем тем людям, которые пишут свои проекты на основе фреймворка 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, но $user в неё уже не передаётся, т.к. у $client есть метод getUser(), для этого я и упоминал о связях между сущностями.

Надеюсь я сэкономил кому-нибудь время. Используйте Symfony 2 и рассказывайте о своих решениях, тогда всем нам будет проще делать своё дело =)

Читайте так же: Sluggable, Timestampable и так далее в Symfony 2
Tags:
Hubs:
Total votes 25: ↑25 and ↓0 +25
Views 2K
Comments 1
Comments Comments 1

Posts