2013-02-14 7 views
7

Was ich versuche zu tun ist nichts schwer. Dies ist mein erstes Projekt auf Symfony und es ist wirklich verwirrend.FOSUserBundle Registrierung anpassen

Ich benutze FOSUSerbundle. Ich möchte keine Anmeldung und Registrierung unter /login und /registration

Also habe ich ein Bündel, das Kind von FOSUSerbundle ist ... und es überschreibt seine Zweige.

Ich habe :: base.html.twig, wo ich header.html.twig und dort habe ich: {% render 'FOSUserBundle:Security:login' %}, die mein teplate (übersteuerte die FOS ein) funktioniert gr8. Auch die Fehler nach dem Senden werden auf der :: basis Vorlage unter "/" wiedergegeben.

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

Funktioniert gut.

Und ich muss genau das gleiche für meine Registrierung tun.

So in ::base I umfassen welcome_page.html.twig wo ich Code {% render 'FOSUserBundle:Registration:register' %} und da ich unter meiner rewrited Vorlage haben: WelcomePageBundle:Registration:register.html.twig dies:

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

, die auch von MY rewrited Bundle enthalten: WelcomePageBundle:Registration:register_content.html.twig dies:

{% 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> 

Alles funktioniert wie ein Zauber ... alle Dateien sind enthalten und angezeigt. Aber das Problem kommt jetzt.

Wenn ich Weg gehen /register

(die von FOS Bündel Basisroute ist)

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

... ausfüllen und klicken Sie auf Absenden ... es funktioniert. Die Fehler werden angezeigt oder Registrierung ist succes ..

Aber wenn ich Form von meiner Route / einreichen, wo der Registrierungscontroller (gerendert ok) gemacht wird, dauert es meine auf dieser Strecke :/register, die aufgrund dieser Pfad ein normales Verhalten:

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

... diese Seite ist durch nichts nicht mit Fehlern so seine nur sauberen Form auf weiße Seite erweitert ... OK

Aber wie kann ich möglich diese Form macht die Arbeit mit Fehlern und Erfolg Anzeige oN MY :: Basisvorlage wie der Login? und gehen Sie nicht zu /register Route? Ich habe versucht, /register für / ersetzen, die mich zu meiner ::base Vorlage (wie im Login ich tun) bringen.

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

Aber keiner der Fehler oder Erfolg angezeigt ...

Kennen jemand Lösung?

+0

Haben Sie versucht, die Route fos_user_register zu ändern, die registration.xml aus dem Bundle enthält, und ihm (der Route) mit/anstelle von/register vorangestellt? Sieht aus, als hättest du gerade eine andere Route erstellt, die zum Register-Controller führt. –

+0

Hast du das richtig funktioniert? Und war es Vadims Vorschlag, der das Problem für dich gelöst hat? – AMP

Antwort

4

Sie finden die offizielle Dokumentation finden, wie Standard-FOSUserBundle Controller bei http://symfony.com/doc/current/bundles/FOSUserBundle/overriding_controllers.html

erstellen Controller für Ihre Homepage und Forward-Anfragen (http://symfony.com/doc/master/book/controller.html#forwarding) zu FOSUserBundle Registrierungscontroller oder füge Logik zu Ihren eigenen Controller zu unterbrechen, nachdem tun was auch immer FOSUserBundle tut bei der Registrierung:

<?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; 
    } 
} 

oder

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