Передача нескольких форм для просмотра, определенных в разных службах в Symfony2

Я работаю над проектом, в котором мы используем DependencyInjection, поэтому у меня есть src\Common\CommonBundle\Resources\config\services.yml следующее определение:

services:
    address.form:
        class: Wuelto\Common\CommonBundle\Controller\FormAddressController
        arguments: [@form.factory, @doctrine.orm.entity_manager]
    address_extra_info.form:
        class: Wuelto\Common\CommonBundle\Controller\FormAddressExtraInfoController
        arguments: [@form.factory, @doctrine.orm.entity_manager]

И src\Company\RegisterCompanyBundle\Resources\config\services.yml

services:
    registercompany.form:
        class: Wuelto\Company\RegisterCompanyBundle\Controller\FormRegisterCompanyController
        arguments: [@form.factory, @doctrine.orm.entity_manager]

И это код контроллеров (только один, остальные одинаковые, только классы меняются):

class FormAddressExtraInfoController {

    public function __construct(FormFactoryInterface $formFactory, EntityManager $em) {
        $this->formFactory = $formFactory;
        $this->em = $em;
    }

    private function getEntity($id) {
        $entity = new AddressExtraInfo();

        try {
            if (isset($id)) {
                $entity = $this->em->getRepository("CommonBundle:AddressExtraInfo")->find($id);
            }
        } catch (\Exception $e) {

        }

        return $entity;
    }

    public function getAction($id = null) {
        $entity = $this->getEntity($id);
        $form = $this->formFactory->create(new AddressExtraInfoType($id), $entity, array('method' => 'POST'));
        return array('formAddressExtraInfo' => $form->createView());
    }

}

Так вот проблема. В другом контроллере (\Website\FrontendBundle\Controller\sellerController.php) вне этих пакетов я пытаюсь получить представление $formXXX, используя этот фрагмент кода:

$this->render('FrontendBundle:Seller:newSellerLayout.html.twig', array($this->get('registercompany.form')->getAction(), $this->get('address_extra_info.form')->getAction()));

Но я получаю эту ошибку:

Переменная formCompany не существует в FrontendBundle:Seller:newCompany.html.twig в строке 10.

Причина? Я не передаю значения, как должно быть, но удивлюсь, если я передам их как:

$this->render('FrontendBundle:Seller:newSellerLayout.html.twig', array('formCompany' => $this->get('registercompany.form')->getAction(), 'formAddressExtraInfo' => $this->get('address_extra_info.form')->getAction()));

Затем ошибка превращается в это:

ContextErrorException: Catchable Fatal Error: Аргумент 1, переданный в Symfony\Component\Form\FormRenderer::renderBlock(), должен быть экземпляром Symfony\Component\Form\FormView, заданным массивом

Я не знаю, как это исправить или где я делаю что-то не так?


person ReynierPM    schedule 02.03.2014    source источник


Ответы (1)


Ошибка ясна и значима, говоря вам, что ей нужен экземпляр FormView, и вы передали массив в свой метод getAction(), т.е. return array('formAddressExtraInfo' => $form->createView()); вам нужно return $form->createView()

public function getAction($id = null) {
    $entity = $this->getEntity($id);
    $form = $this->formFactory->create(new AddressExtraInfoType($id), $entity, array('method' => 'POST'));
    return  $form->createView();
 /*createView() is an instance of Symfony\Component\Form\FormView 
  *which symfony expects while rendering the form
  */
}
person M Khalid Junaid    schedule 02.03.2014