symfony symfony-2.8

symfony - Cómo obtener el usuario registrado actual en un servicio



symfony-2.8 (6)

En Symfony 2.8 / 3.0, con nuestros nuevos y sofisticados componentes de seguridad, ¿cómo obtengo el objeto de User (por ejemplo, FOSUser ) registrado actualmente en un servicio sin inyectar todo el contenedor?

¿Es incluso posible de una manera no hacky ?

PD: No consideremos " pasarlo a la función de servicio como un parámetro " por ser trivialmente obvio. Además, sucio.




Symfony hace esto en Symfony / Bundle / FrameworkBundle / ControllerControllerTrait

protected function getUser() { if (!$this->container->has(''security.token_storage'')) { throw new /LogicException(''The SecurityBundle is not registered in your application.''); } if (null === $token = $this->container->get(''security.token_storage'')->getToken()) { return; } if (!is_object($user = $token->getUser())) { // e.g. anonymous authentication return; } return $user; }

Entonces, si simplemente inyecta y reemplaza security.token_storage , está listo.


Usando la inyección de dependencia del constructor, puedes hacerlo de esta manera:

use Symfony/Component/Security/Core/Authentication/Token/Storage/TokenStorageInterface; class A { private $user; public function __construct(TokenStorageInterface $tokenStorage) { $this->user = $tokenStorage->getToken()->getUser(); } public function foo() { dump($this->user); } }



Nuevo en la versión 3.4: La clase de utilidad de seguridad se introdujo en Symfony 3.4.

use Symfony/Component/Security/Core/Security; public function indexAction(Security $security) { $user = $security->getUser(); }

symfony.com/doc/3.4/…