2012-04-02 5 views
1

Ich muss einen neuen Benutzer vor dem Speichern einen Standardwert festlegen. Das Problem ist, dass ich keinen Weg finden kann, ein Objekt durch das Repository aus dem FormHandler zu bekommen.FOSUserBundle: Repository von innen abrufen FormHandler

<?php 
namespace Acme\UserBundle\Form\Handler; 

use FOS\UserBundle\Form\Handler\RegistrationFormHandler as BaseHandler; 
use FOS\UserBundle\Model\UserInterface; 

class RegistrationFormHandler extends BaseHandler 
{ 

    protected function onSuccess(UserInterface $user, $confirmation) 
    { 
     $repository = $this->container->get('doctrine')->getEntityManager()->getRepository('AcmeUserBundle:Photo'); 
     if($user->isMale()){ 
      $photo = $repository->getDefaultForMale(); 
      $user->setPhoto($photo); 
     } 
     else { 
      $photo = $repository->getDefaultForFemale(); 
      $user->setPhoto($photo); 
     } 

     parent::onSuccess($user, $confirmation); 
    } 
} 

Das Problem kommt aus der folgenden Zeile:

$repository = $this->container->get('doctrine')->getEntityManager()->getRepository('AcmeUserBundle:Photo'); 

... und ich kann nicht einen Weg finden, dieses Repository zu bekommen, oder das Unternehmen Manager von diesem FormHandler.

Vielen Dank für Ihre Hilfe! A

Antwort

4

Sie müssen einen Dienst definieren, der auf Ihre erweiterte Handler-Klasse verweist und ihn in app/config.yml zeigt. z

Die Klasse,

//namespace definitions 
class MyHandler extends RegistrationFormHandler{ 

    private $container; 

    public function __construct(Form $form, Request $request, UserManagerInterface $userManager, MailerInterface $mailer, ContainerInterface $container) 
    { 
     parent::__construct($form, $request, $userManager, $mailer); 
     $this->container = $container; 
    } 

    protected function onSuccess(UserInterface $user, $confirmation) 
    { 
     $repository = $this->container->get('doctrine')->getEntityManager()->getRepository('AcmeUserBundle:Photo'); 

     // your code 

    } 

Der Service,

my.registration.form.handler: 
    scope: request 
    class: FQCN\Of\MyHandler 
    arguments: [@fos_user.registration.form, @request, @fos_user.user_manager, @fos_user.mailer, @service_container] 

schließlich in app/config.yml,

fos_user: 
    #.... 
    registration: 
     #... 
     form: 
     handler: my.registration.form.handler 
+0

Perfect! Vielen vielen Dank, alles funktioniert einwandfrei :-) – Aurel

+1

Ich musste das letzte Argument in der Service-Definition ändern zu: @ fos_user.util.token_generator – Nick

+0

Danke, habe mir meine Zeit gerettet! In der neuen Version gibt es ein neues Argument: '@ fos_user.util.token_generator' vor '@ service_container' – Vedmant

-1

FOS hat seinen eigenen UserManager. Versuche es zu benutzen.