Здравствуйте.
Сейчас я бы хотел облегчить жизнь всем тем людям, которые пишут свои проекты на основе фреймворка Symfony 2.
В Symfony 2, есть отличные инструменты по созданию форм из сущностей, а так же, что более интересно — объединенные формы.
Так вот, если вам понадобится установить в такую (объединенную) форму значения по умолчанию из сущностей (объектов), то вы (как и я) будете блуждать по просторам интернета, в поисках решения этой задачи, т.к. в документации этого, вроде бы, нет (во всяком случае, я не нашёл).
И так… я генерировал форму на лету (в контроллере) следующим образом:
В этом случае я никак не мог установить значения по умолчанию из объектов User и Client (стоит ещё отметить, что между этими объектами связть «User one to many Clients»). После долгого поиска, я наткнулся лишь на половину решения проблемы, а с остальным справился сам. Так вот, собственно решение:
Мы видим, что вместо createFormBuilder, я использую непосредственно createForm, в который передаётся тип формы и объект (из объекта, собственно, и берутся значения по умолчанию). После этого к этой же форме прикрепляется другая с помощью метода add, но $user в неё уже не передаётся, т.к. у $client есть метод getUser(), для этого я и упоминал о связях между сущностями.
Надеюсь я сэкономил кому-нибудь время. Используйте Symfony 2 и рассказывайте о своих решениях, тогда всем нам будет проще делать своё дело =)
Читайте так же: Sluggable, Timestampable и так далее в Symfony 2
Сейчас я бы хотел облегчить жизнь всем тем людям, которые пишут свои проекты на основе фреймворка 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