2013-02-14 15 views
7

Quello che sto cercando di fare è niente di difficile. Questo è il mio primo progetto su symfony ed è davvero confuso.Registrazione FOSUserBundle personalizza

Sto usando FOSUSerbundle. Non voglio avere un login e una registrazione sotto /login e /registration

Così ho creato un pacchetto che è figlio di FOSUSerbundle ... e sovrascrive i suoi ramoscelli.

Ho :: base.html.twig dove includo header.html.twig e lì ho: {% render 'FOSUserBundle:Security:login' %} che esegue il rendering della mia targhetta (sovrascritta quella FOS) funziona gr8. Anche gli errori dopo la submission sono il rendering sul muggito modello :: base "/".

#Security.yml 
    form_login: 
     check_path: /login_check 
     login_path:/
     provider: fos_userbundle 

Funziona alla grande.

E ho bisogno di fare esattamente lo stesso per la mia registrazione.

Quindi, in ::base ho includono welcome_page.html.twig in cui il codice mi {% render 'FOSUserBundle:Registration:register' %} e ci ho sotto il mio modello riscritto: WelcomePageBundle:Registration:register.html.twig questo:

{% block fos_user_content %} 
{% include "FOSUserBundle:Registration:register_content.html.twig" %} 
{% endblock fos_user_content %}[/code] 

che comprendono anche dal mio fagotto riscritto: WelcomePageBundle:Registration:register_content.html.twig questo:

{% for key, message in app.session.getFlashes() %} 
<div class="{{ key }}"> 
    {{ message|trans({}, 'FOSUserBundle') }} 
</div> 
{% endfor %} 

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

    <input type="submit" class="registration_submit" value="{{  'welcome_page.registration_box.register_submit'|trans }}"/> 
</form> 

<div class="v_pripade"> 
    {{ 'welcome_page.registration_box.with_reg_problems'|trans }} 
    <span style='color: #fff568'>{{ 'welcome_page.registration_box.with_reg_problems_part2'|trans }}</span> 
</div> 

Tutto funziona come un incantesimo ... tutti i file sono inclusi e visualizzati in anteprima. Ma il problema arriva ora.

Quando vado al percorso /register

(che è percorso base da FOS fascio)

<route id="fos_user_registration_register" pattern="/register"> 
    <default key="_controller">FOSUserBundle:Registration:register</default> 
</route> 

... compilare i dati e fare clic su Invia ... funziona. Gli errori vengono visualizzati o di registrazione è successo ..

Ma quando presento forma dal mio percorso / in cui il controller di registrazione è reso (reso ok) ci vuole il mio a questo percorso :/register che è un comportamento normale, perché questo percorso:

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

... questo sito non è prorogato di nulla di più la sua forma solo pulito sulla pagina bianca con errori ... OK

Ma come posso possibile lavoro rendono questo modulo con errori visualizzazione e il successo sul mio :: modello base come il login? e non andare al percorso /register? Ho provato a sostituire /register per / che mi porta al mio modello ::base (come nel login che faccio).

#security.yml 
form_login: 
    check_path: /login_check 
    login_path:/
    provider: fos_userbundle 

Ma vengono visualizzati nessuno degli errori o successo ...

Do Qualcuno sa soluzione?

+0

Hai provato a cambiare fos_user_register route che include registration.xml dal bundle e prefisso (il percorso) con/invece di/register? Sembra che tu abbia appena creato un'altra rotta che indirizza al controller del registro. –

+0

Hai funzionato correttamente? E fu il suggerimento di Vadim a risolvere il problema per te? – AMP

risposta

4

Troverete la documentazione ufficiale su come ignorare i controller di default FOSUserBundle a http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_controllers.html

Creare un controller per la tua home page e trasmettere le richieste (http://symfony.com/doc/master/book/controller.html#forwarding) al controllore registrazione FOSUserBundle o aggiungere la logica per il proprio controllore dopo aver fatto qualunque sia FOSUserBundle fa al momento della registrazione:

<?php 

namespace Acme\UserBundle\Controller; 

// Imports @route annotation 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 

class CustomRegistrationController extends BaseController { 

    /** 
    * @Route("/") 
    */ 
    public function register() { 
     $response = $this->forward('FOSUserBundle:Registration:register'); 

     return $response; 
    } 
} 

o

<?php 

namespace Acme\UserBundle\Controller; 

use Symfony\Component\HttpFoundation\RedirectResponse; 
use FOS\UserBundle\Controller\RegistrationController as BaseController; 

class RegistrationController extends BaseController 
{ 
    public function registerAction() 
    { 
     $form = $this->container->get('fos_user.registration.form'); 
     $formHandler = $this->container->get('fos_user.registration.form.handler'); 
     $confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled'); 

     $process = $formHandler->process($confirmationEnabled); 
     if ($process) { 
      $user = $form->getData(); 

      /***************************************************** 
      * Add new functionality (e.g. log the registration) * 
      *****************************************************/ 
      $this->container->get('logger')->info(
       sprintf('New user registration: %s', $user) 
      ); 

      if ($confirmationEnabled) { 
       $this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail()); 
       $route = 'fos_user_registration_check_email'; 
      } else { 
       $this->authenticateUser($user); 
       $route = 'fos_user_registration_confirmed'; 
      } 

      $this->setFlash('fos_user_success', 'registration.flash.user_created'); 
      $url = $this->container->get('router')->generate($route); 

      return new RedirectResponse($url); 
     } 

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