FOSUserBundle: получить хранилище изнутри FormHandler - PullRequest
1 голос
/ 02 апреля 2012

Мне нужно установить значение по умолчанию для нового пользователя перед его сохранением. Проблема в том, что я не могу найти способ получить объект через его хранилище изнутри 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

Ответы [ 2 ]

4 голосов
/ 02 апреля 2012

Вы должны определить сервис, который ссылается на ваш расширенный класс обработчика, и указать его в app/config.yml. * например 1002 *

Класс,

//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 голосов
/ 02 апреля 2012

FOS получил свой собственный UserManager. Попробуйте использовать это.

...