2014-06-04 3 views
1

Итак, я использую FOSUserBundle, и я хочу реализовать регистрационную форму во всплывающем модуле, который появится, когда пользователь нажмет кнопку, чтобы он мог зарегистрироваться.Как реализовать регистрационную форму FOSUserBundle на других страницах

У меня уже есть отдельная страница регистра, и мне удалось расширить регистрационную форму, как это ...

<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST"> 

       {{ form_widget(form) }} 

       <button type="Submit">{{ 'registration.submit'|trans }}</button> 

</form> 

Но это работает только потому, что имеют такую ​​же структуру папок FOSUserBundle имеет (просмотры/регистрация /register.html.twig), и это единственный способ расширить регистрационную форму или любую форму из FOSUserBundle, но теперь я хочу добавить форму этого модуля, и когда я это сделаю ...

<div class="panel panel-default"> 
       <div class="panel-heading"> 
        <h4 class="panel-title"> 
         <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Register</a> 
        </h4> 
       </div> 
       <div id="collapseOne" class="panel-collapse collapse in"> 
        <div class="panel-body"> 
         <form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST"> 

          {{ form_widget(form) }} 

          <button type="Submit">{{ 'registration.submit'|trans }}</button> 

         </form> 
        </div> 
       </div> 
      </div><!-- register --> 

Это не работает, потому что он находится в другом месте все вместе.

Я хочу использовать форму регистра глобально, чтобы я мог вызывать этот всплывающий модуль на любой странице, которую я хочу. Нет, как я могу это сделать?

+0

Где код вашего действия в контроллере? –

+0

Укажите, что вы пытаетесь сделать. U всегда может расширять FOSUserBundle, если u r использует symfony. Также полезно было бы использовать FOSUserBundle verison. – fperet

+0

Я хочу использовать форму регистра глобально, чтобы я мог вызывать этот всплывающий модуль на любой странице, которую я хочу. – Ruby

ответ

1

Если я понял, что все, что вам нужно сделать, это создать всплывающее окно с формой reg на моем сайте.

Я хотел бы сделать этот трюк следующим образом: в шаблоне макета у создать какой-то блок, как

{% block modal_registration %} 
    <div class="panel panel-default"> 
     {{ render(controller('UrBundle:Registration:regForm')) }} 
    </div><!-- register --> 
{% endblock %} 

Это может быть легко заменен некоторым расширением веточку.

Затем создайте ур контроллер для рендеринга, что блок, он должен выглядеть примерно так:

class RegistrationController extends ContainerAware 
{ 
    public function regFormAction() 
    {  

     /** @var \FOS\UserBundle\Form\Factory\FactoryInterface $formFactory*/ 
     $formFactory = $this->container->get('fos_user.registration.form.factory');   

     $form = $formFactory->createForm(); 

     return $this->container->get('templating')->renderResponse('UrBundle:Registration:register.html.twig', array(
      'form' => $form->createView(), 
     )); 
    } 
} 

Как вы можете видеть форму завода просто сервис, так вы можете получить к нему доступ с помощью вашего контейнера.

И шаблон для этого блока может выглядеть ваши:

  <div class="panel-heading"> 
       <h4 class="panel-title"> 
        <a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Register</a> 
       </h4> 
      </div> 
      <div id="collapseOne" class="panel-collapse collapse in"> 
       <div class="panel-body"> 
        <form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST"> 

         {{ form_widget(form) }} 

         <button type="Submit">{{ 'registration.submit'|trans }}</button> 

        </form> 
       </div> 
      </div> 

Пример действительно упрощен, и должны делать какую-то работу, если u'll столкнуться с новыми проблемами.

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