2012-04-02 45 views
1

我需要在保存之前爲新用戶設置默認值。 問題是我找不到一種方法從FormHandler中通過它的存儲庫獲取對象。FOSUserBundle:從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); 
    } 
} 

的問題來自於以下行:

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

...我不能找到一個辦法讓這個倉庫,或從本FormHandler實體管理器。

非常感謝您的幫助! A

回答

4

您必須定義一個服務,引用您的擴展處理程序類並將其指向app/config.yml。 e.g

類,

//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 

    } 

服務,

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] 

最後在app/config.yml

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

完美!很多很多謝謝,一切工作正常:-) – Aurel 2012-04-02 17:26:55

+1

我不得不將服務定義中的最後一個參數更改爲:@ fos_user.util.token_generator – Nick 2013-01-29 21:13:51

+0

謝謝,節省了我的時間!在新版本中有一個新的參數:'@ service_container'前的'@ fos_user.util.token_generator' – Vedmant 2015-10-29 22:23:21

-1

FOS有他自己的UserManager。嘗試使用這個。