Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony][SF3] Przerwa techniczna - EventListener
Forum PHP.pl > Forum > PHP > Frameworki
Lirdoner
Cześć, mam w panelu admina taki checkbox który gry jest zaznaczony ma sprawiać, że każdy request który nie jest do panelu admina jest przekierowywany na /maintenance.
Utworzyłem taki EventListener:
  1. <?php
  2.  
  3. namespace AppBundle\EventListener;
  4.  
  5. use AppBundle\Model\ConfigurationManager;
  6. use Symfony\Component\DependencyInjection\ContainerInterface;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  9. use Symfony\Component\Routing\Router;
  10.  
  11. class MaintenanceListener
  12. {
  13.  
  14. private $container;
  15. private $router;
  16. private $configurationManager;
  17.  
  18. public function __construct(ConfigurationManager $configurationManager, Router $router, ContainerInterface $container)
  19. {
  20. $this->configurationManager = $configurationManager;
  21. $this->router = $router;
  22. $this->container = $container;
  23. }
  24.  
  25. public function onKernelRequest(GetResponseEvent $responseEvent)
  26. {
  27. $request = $responseEvent->getRequest();
  28. if($this->configurationManager->get('site_disabled') && $request->get('_route') !== 'maintenance' && strpos($request->get('_route'), 'admin_') === false)
  29. {
  30. $responseEvent->setResponse(new RedirectResponse($this->router->generate('maintenance')));
  31. }
  32. }
  33. }

services.yml:
Kod
app.maintenance_listener:
        class: AppBundle\EventListener\MaintenanceListener
        tags:
          - { name: kernel.event_listener, event: kernel.request }


Niby działa jak należy, jednak wchodząc do panelu admina mam błąd w konsoli spowodowany debuggerem:
Kod
Uncaught TypeError: Cannot read property 'nodeValue' of null
    at index:226
    at index:226
    at XMLHttpRequest.xhr.onreadystatechange (index:226)

Błąd ten niestety rozwala mi panel administracyjny bo znajduje się na nim dużo js. Ktoś się spotkał z podobnym przypadkiem lub wie co robię źle?
destroyerr
Zajrzyj sobie do pliku config/routing_dev.yml i zobacz jakie jeszcze trasy powinieneś wykluczyć. Wybacz, ale mam jeszcze uwagę odnośnie metody onKernelRequest, ja nie lubię czytać takich długich warunków, zdecydowanie preferuję taki styl:
  1. public function onKernelRequest(GetResponseEvent $responseEvent)
  2. {
  3. $request = $responseEvent->getRequest();
  4. if (!$this->configurationManager->get('site_disabled')) {
  5. return;
  6. }
  7. if ($request->get('_route') === 'maintenance') {
  8. return;
  9. }
  10. if (strpos($request->get('_route'), 'admin_') !== false) {
  11. return;
  12. }
  13.  
  14. $responseEvent->setResponse(new RedirectResponse($this->router->generate('maintenance')));
  15. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.