Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I finally worked out the problem. Thanks to Martin, I used the ControllerNameParser class to parse the Controller name. But I also needed to inject the container inside the EventListener from the services.yml file. I thought it'd be good to post the code for developers facing the same problem:</p> <p><strong>Services.yml:</strong></p> <pre><code>parameters: session_handler.class: HRPortal\SystemBundle\Services\SessionHandler token_listener.class: HRPortal\SystemBundle\EventListener\TokenListener ... services: session_handler: class: "%session_handler.class%" arguments: em: @doctrine.orm.entity_manager session: @session tokens_listener: class: "%token_listener.class%" arguments: em: @doctrine.orm.entity_manager container: @service_container tags: - { name: kernel.event_listener, event: kernel.controller, method: onKernelController } ... </code></pre> <p><strong>TokenListener.php</strong></p> <pre><code>&lt;?php namespace HRPortal\SystemBundle\EventListener; use HRPortal\SystemBundle\Controller\TokenAuthenticatedController; use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use Symfony\Component\HttpKernel\Event\FilterControllerEvent; use Symfony\Component\HttpFoundation\Request; use Symfony\Bundle\FrameworkBundle\Controller\ControllerResolver; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Bundle\FrameworkBundle\Controller\ControllerNameParser; class TokenListener extends Controller { protected $em; protected $userRepo; protected $container; public function __construct($em, $container) { $this-&gt;container = $container; $this-&gt;em = $em; $this-&gt;userRepo = $em-&gt;getRepository('HRPortalSystemBundle:Users'); } public function onKernelController(FilterControllerEvent $event) { $success = false; $controller = $event-&gt;getController(); if (!is_array($controller)) { return; } if ($controller[0] instanceof TokenAuthenticatedController) { $session = $this-&gt;container-&gt;get('session_handler'); $loggedIn = $session-&gt;isLoggedIn(); if(!$loggedIn){ $request = new Request(); $request-&gt;attributes-&gt;set('_controller', 'HRPortal\SystemBundle\Controller\AuthController::loginAction'); $parser = new ControllerNameParser($this-&gt;container-&gt;get('kernel')); $resolver = new ControllerResolver($this-&gt;container, $parser); $event-&gt;setController($resolver-&gt;getController($request)); } return; } } } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload