Как получить доступ к EntityManager из класса UserProvider

#doctrine #symfony

#доктрина #symfony

Вопрос:

Я хотел бы получить доступ к EntityManager из класса UserProvider, чтобы иметь возможность мгновенно сохранять пользователей в моей базе данных после их входа в систему через API.

Но этот класс реализует UserProviderInterface и не расширяет контроллер, поэтому этот код не может работать:

 $em = $this->getDoctrine()->getEntityManager();
  

Вот полный класс

 <?php
namespace amContributionBundleObjects;

use amContributionBundleEntityUser;
use SymfonyComponentSecurityCoreUserUserInterface;
use SymfonyComponentSecurityCoreUserUserProviderInterface;
use SymfonyComponentSecurityCoreExceptionUsernameNotFoundException;

class UserProvider implements UserProviderInterface
{
    public function loadUserByUsername($username){

            // Processing to the authentification using curl

            $url = 'exemple.com/api.php?pseudo='.$username;
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            $output = json_decode(curl_exec($ch));
            curl_close($ch);

            try {

                $user = // ... looking for user in DB
                // How to ??

                if (null === $user) {
                    // ... user creation
                }

                return $user;

            } catch (Exception $e) {
                echo $e->getMessage();
                throw new UsernameNotFoundException(sprintf('User "%s" not found.', $username));
            }
    }

    function supportsClass($class){}

    function refreshUser(UserInterface $user){
       return $this->loadUserByUsername($user->getUsername());
    }
}
  

Как я могу получить экземпляр EntityManager здесь?

Ответ №1:

Попробуйте расширить Symfony Component DependencyInjection ContainerAware. Затем вы можете использовать контейнер для поиска любого объекта.

Также не забудьте настроить его как службу: http://symfony.com/doc/current/book/service_container.html

Комментарии:

1. Спасибо, я решаю проблему, расширяя Doctrine ORM EntityManager и добавляя аргументы в конфигурацию службы se