Symfony 4: запросить изменение объекта

я работаю над Symfony 4.

У меня есть услуга:

    App\EventListener\EbayExceptionListener:
    tags:
        - { name: kernel.event_listener, event: kernel.controller }
    arguments: [ "@doctrine.orm.entity_manager" , "@router" , "@session" ]

А вот и мой слушатель:

<?php

namespace App\EventListener;

use App\Entity\Ebay;
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\Routing\Router;

class EbayExceptionListener
{
    private $repository;
    private $router;
    private $session;
    private $redirectName = 'home';

    public function __construct(EntityManager $entityManager, Router $router, Session $session)
    {
        $this->repository = $entityManager->getRepository(Ebay::class);
        $this->router = $router;
        $this->session = $session;
    }

    //Check if an eBay entity exist in the database, if not redirect to the form to create the eBay entity
    public function onKernelController(FilterControllerEvent $event)
    {
        $ebay = $this->repository->findOneBy(['name' => 'Ebay']);
        $request = $event->getRequest();
        $routeName = $request->get('_route');
        dump($routeName);
        if ($routeName != "home" AND $ebay == null) {
            $this->session->getFlashBag()->add('error', 'Please provide information for Ebay form');
            return new RedirectResponse($this->router->generate($this->redirectName));
        }
    }
}

Мой контроллер:

<?php

namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class HomeController extends Controller
{
    /**
     * @Route("/", name="home")
     */
    public function index()
    {
        return $this->render('home/index.html.twig', [
            'controller_name' => 'HomeController',
        ]);
    }
}

У меня проблема с переменной $routeName внутри моего Listener, на самом деле значение этой переменной должно быть именем текущего маршрута. Но когда я использую dump($routeName)

У меня есть 2 результата: "_wdt" и "home"

введите здесь описание изображения

Я не знаю, почему параметры $request не совпадают при выполнении моего слушателя и после создания страницы. Поскольку у меня нет вызова страницы «_wdt», она должна быть «домой». Я сделал что-то неправильно ?

Спасибо за помощь.


person Alexandre97122    schedule 01.04.2018    source источник
comment
_wdt — это то, что панель профиля в нижней части экрана использует для получения отладочной информации. Что происходит, так это то, что домашний маршрут возвращает ответ, а затем используется немного javascript для вызова маршрута _wdt. И вы видите оба. Это произойдет только в режиме разработки, поэтому просто добавьте галочку, чтобы игнорировать _wdt. Вы также должны знать, что можно генерировать подзапросы, которые в основном вкладывают маршруты. Поэтому вы должны убедиться, что запрос также является основным запросом.   -  person Cerad    schedule 01.04.2018
comment
Привет Cerad спасибо за ваш ответ, но я не понял, как решить мою проблему. Что вы подразумеваете под добавлением проверки игнорирования _wdt?   -  person Alexandre97122    schedule 01.04.2018
comment
если ($ routeName === '_wdt') вернуть;   -  person Cerad    schedule 01.04.2018
comment
Благодаря Cerad я смог найти свой ответ в сообщении htis здесь: stackoverflow.com/questions/48074428/   -  person Alexandre97122    schedule 01.04.2018
comment
Ничто так не говорит спасибо, как голосование.   -  person Cerad    schedule 01.04.2018