【问题标题】:FOSUserBundle : get repository from inside FormHandlerFOSUserBundle :从 FormHandler 内部获取存储库
【发布时间】:2012-04-02 08:34:38
【问题描述】:

我需要在保存之前为新用户设置一个默认值。 问题是我找不到从 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 获取此存储库或实体管理器的方法。

非常感谢您的帮助! 一个

【问题讨论】:

    标签: php symfony fosuserbundle


    【解决方案1】:

    您必须定义一个引用您的扩展处理程序类的服务并将其指向app/config.yml。例如

    班级,

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

    【讨论】:

    • 我不得不将服务定义中的最后一个参数更改为:@fos_user.util.token_generator
    • 谢谢,节省了我的时间!在新版本中有新参数:@fos_user.util.token_generator before @service_container
    【解决方案2】:

    FOS 有自己的 UserManager。尝试使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      相关资源
      最近更新 更多