2012-04-02 65 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。尝试使用这个。

相关问题