php - node - Ha solicitado un servicio inexistente "security.context"
symfony 4 security (2)
El servicio security.context
quedó en desuso en la versión 2.6 y se dividió en dos nuevos servicios: security.authorization_checker
y security.token_storage
.
Algunos usos diferentes de la versión anterior del framework:
// Symfony 2.5
$user = $this->get(''security.context'')->getToken()->getUser();
// Symfony 2.6
$user = $this->get(''security.token_storage'')->getToken()->getUser();
// Symfony 2.5
if (false === $this->get(''security.context'')->isGranted(''ROLE_ADMIN'')) { ... }
// Symfony 2.6
if (false === $this->get(''security.authorization_checker'')->isGranted(''ROLE_ADMIN'')) { ... }
Más información en this anuncio.
Espero que esto ayude
creo servicio pero no funciona
services:
redirectionListener:
class: Front/EcommerceBundle/Listener/RedirectionListener
arguments: ["@service_container","@session"]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
y esta mi clase
namespace Front/EcommerceBundle/Listener;
use Symfony/Component/DependencyInjection/ContainerBuilder;
use Symfony/Component/HttpFoundation/Session/Session;
use Symfony/Component/HttpFoundation/RedirectResponse;
use Symfony/Component/HttpKernel/Event/GetResponseEvent;
class RedirectionListener
{
public function __construct(ContainerBuilder $container, Session $session)
{
$this->session = $session;
$this->router = $container->get(''router'');
$this->securityContext = $container->get(''security.context'');
}
public function onKernelRequest(GetResponseEvent $event)
{
$route = $event->getRequest()->attributes->get(''_route'');
if ($route == ''livraison'' || $route == ''validation'') {
if ($this->session->has(''panier'')) {
if (count($this->session->get(''panier'')) == 0)
$event->setResponse(new RedirectResponse($this->router->generate(''panier'')));
}
if (!is_object($this->securityContext->getToken()->getUser())) {
$this->session->getFlashBag()->add(''notification'',''Vous devez vous identifier'');
$event->setResponse(new RedirectResponse($this->router->generate(''fos_user_security_login'')));
}
}
}
}
ServiceNotFoundException en la línea 268 de Container.php: ha solicitado un servicio inexistente "security.context".
El siguiente ejemplo funcionará:
/*Symfony 4.1.3*/
$user = $this->get(''security.token_storage'')->getToken()->getUser();
echo $user->getId(); // USER ID SESSION