#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