Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony][SF3] Przerwa techniczna - EventListener
Lirdoner
post 9.08.2017, 14:53:46
Post #1





Grupa: Zarejestrowani
Postów: 500
Pomógł: 1
Dołączył: 29.09.2009

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Lirdoner 9.08.2017, 14:58:52
Go to the top of the page
+Quote Post
destroyerr
post 9.08.2017, 20:05:24
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.01.2020 - 05:38