Sie haben einen nicht existierenden Dienst “security.context” angefordert

Lesezeit: 2 Minuten

Benutzer-Avatar
Haythem Hedfi

Ich erstelle einen Dienst, aber er funktioniert nicht

services:
    redirectionListener:
          class: Front\EcommerceBundle\Listener\RedirectionListener
          arguments: ["@service_container","@session"]
          tags:
            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

und das ist meine klasse

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 in Container.php Zeile 268: Sie haben einen nicht existierenden Dienst „security.context“ angefordert.

  • Ein paar unabhängige Vorschläge: Sie müssen nicht den gesamten Container injizieren, wenn Sie nur den Router und security.token_storage benötigen. Und fügen Sie die Sitzung überhaupt nicht ein, ziehen Sie sie einfach aus der Anfrage: $event=>getRequest()->getSession();

    – Cerad

    10. April 2016 um 18:22 Uhr


Das security.context Der Dienst war in 2.6 veraltet und wurde in zwei neue Dienste aufgeteilt: security.authorization_checker und security.token_storage.

Etwas andere Verwendung als in der vorherigen Version des Frameworks:

// 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')) { ... }

Mehr Infos im Dies Bekanntmachung

Ich hoffe das hilft

Benutzer-Avatar
Karl Fournier

Folgendes Beispiel funktioniert:

/*Symfony 4.1.3*/

$user = $this->get('security.token_storage')->getToken()->getUser();

echo $user->getId(); // USER ID SESSION

1066130cookie-checkSie haben einen nicht existierenden Dienst “security.context” angefordert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy