Frage

I'm working on a project where we use DependencyInjection so I have in src\Common\CommonBundle\Resources\config\services.yml the following definition:

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]

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

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

And this is the code behind the controllers (just one the rest is the same with just classes change):

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());
    }

}

So here goes the problem. In another controller(\Website\FrontendBundle\Controller\sellerController.php) outside those bundles I'm trying to get the $formXXX view by using this piece of code:

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

But I get this error:

Variable "formCompany" does not exist in FrontendBundle:Seller:newCompany.html.twig at line 10

The reason? I'm not passing values as should be but surprise if I pass them as:

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

Then the error transform into this:

ContextErrorException: Catchable Fatal Error: Argument 1 passed to Symfony\Component\Form\FormRenderer::renderBlock() must be an instance of Symfony\Component\Form\FormView, array given

I don't know how to fix this or where I'm doing something wrong?

War es hilfreich?

Lösung

Error is clear and meaningful telling you that it needs the FormView instance and you have passed array in your getAction() method i.e return array('formAddressExtraInfo' => $form->createView()); you need to 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
  */
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top