2013-04-05 3 views
0

Я хочу добавить дополнительный шаг для регистрации. У меня есть собственный FormType «Firma», который пытается получить мой дополнительный метод в registerController. При вызове этого действия в контроллере получает ошибку:Symfony2 FOSUserBundle - дополнительная форма

Fatal error: Call to undefined method My\FrontendBundle\Form\Type\FirmaType::createView() in /var/www/Budowlanka/src/My/FrontendBundle/Controller/RegistrationController.php on line 107 

nextStepAction действие в RegisterController

public function nextStepAction($token) { 

    $user = $this->container->get('fos_user.user_manager')->findUserByConfirmationToken($token); 

    if (null === $user) { 
     throw new NotFoundHttpException(sprintf('The user with confirmation token "%s" does not exist', $token)); 
    } 

    $this->container->get('fos_user.user_manager')->updateUser($user); 

    $form = $this->container->get('my_user.firma.form.type'); 
    . 
    . 
    . 
    return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.' . $this->getEngine(), array(
       'form' => $form->createView(), 
       'theme' => $this->container->getParameter('fos_user.template.theme'), 
    )); 

service.xml:

<service id="my_user.firma.form.type" class="My\FrontendBundle\Form\Type\FirmaType"> 
    <tag name="form.type" alias="my_user_firma" /> 
    <argument>My\FrontendBundle\Entity\Firma</argument> 
</service> 

пихты maType:

namespace My\FrontendBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilder; 

class FirmaType extends AbstractType 
{ 
public function buildForm(FormBuilder $builder, array $options) 
{ 
    $builder 
     ->add('nazwa') 
     ->add('ulica') 
     ->add('nr_budynku') 
     ->add('nr_lokalu') 
     ->add('miasto') 
     ->add('kod_pocztowy') 
     ->add('poczta') 
     ->add('telefon_1') 
     ->add('telefon_2') 
     ->add('email') 
     ->add('www') 
     ->add('liczba_opinii') 
     ->add('nip') 
     ->add('imie') 
     ->add('nazwisko') 
     ->add('haslo') 
     ->add('logo') 
     ->add('opis_uslug') 
     ->add('data_dodania') 
     ->add('data_modyfikacji') 
     ->add('slug') 
     ->add('specjalizacje') 
    ; 
} 

public function getName() 
{ 
    return 'my_frontendbundle_firmatype'; 
} 
} 

EDIT:

Он отлично работает, но теперь у меня есть проблема с этикетками из manytomany поля отношений.

  ->add('specjalizacja', 'entity', array(
       'label' => 'Specjalizacje', 
       'multiple' => true, 
       'expanded' => true, 
       'property' => 'nazwa', 
       'class' => 'My\FrontendBundle\Entity\Specjalizacja', 
       'query_builder' => function(\Doctrine\ORM\EntityRepository $er) { 
        $qb = $er->createQueryBuilder('g'); 

        return $qb->orderBy('g.nazwa', 'DESC'); 
       } 
      ) 

Он отображает ярлык 'my_user_firma_form_specjalizacja_110' (110 является идентификатор записи) вместо Nazwa поле Entity. У меня есть метод __toString() в Specjalizacja Entity class

+0

Какой у вас код в строке 107? –

ответ

1

Вы должны использовать формуFactory для создания своей формы.

<service id="my_user.firma.form" factory-method="createNamed" factory-service="form.factory" class="Symfony\Component\Form\Form"> 
    <argument>my_user_firma</argument> 
    <argument>'my_user_firma_form'</argument> 
</service> 

<service id="my_user.firma.form.type" class="My\FrontendBundle\Form\Type\FirmaType"> 
    <tag name="form.type" alias="my_user_firma" /> 
    <argument>My\FrontendBundle\Entity\Firma</argument> 
</service> 

А потом позвонить ..

$form = $this->container->get('my_user.firma.form'); 

Здесь вы должны быть в состоянии использовать $form->createView().

Смежные вопросы