Symfony Listener 在 Controller 的小改动后消失了

Symfony Listener gone missing after minor changes in Controller

我在使用 Symfony 监听器时遇到了一些奇怪的行为。我有一个工作配置,但是当我更改或向控制器添加某些内容时,Expected to find class "App\EventListener\AuthenticationSuccessListener" 出现。更改可能只是路由路径字符串中的内容。所有代码都是here。 删除缓存和服务器重启没有帮助。

听众

namespace AppBundle\EventListener;

use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationFailureEvent;
use Lexik\Bundle\JWTAuthenticationBundle\Response\JWTAuthenticationFailureResponse;
use Symfony\Component\Serializer\SerializerInterface;

class AuthenticationListener
{
    /**
     * @var SerializerInterface
     */
    private $serializer;

    public function __construct(SerializerInterface $serializer)
    {
        $this->serializer = $serializer;
    }

    /**
     * @param AuthenticationSuccessEvent $event
     */
    public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event)
    {

        $event->setData([
            'user' => $this->serializer->normalize($event->getUser(), null, ['groups' => ['basic']]),
            'token' => $event->getData()['token'],
        ]);

    }

}

services.yaml

# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:

services:
    app.event.authentication_success_response:
        class: AppBundle\EventListener\AuthenticationListener
        tags:
            - { name: kernel.event_listener, event: lexik_jwt_authentication.on_authentication_success, method: onAuthenticationSuccessResponse }
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/*'
        exclude: '../src/{DependencyInjection,Entity,Migrations,Tests,Kernel.php}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']

控制器

<?php

namespace App\Controller;

use App\Entity\User;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityManagerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\SerializerInterface;

class ApiUserController extends AbstractController
{
    /**
     * @Route("/api/verify_token", methods="POST", name="api_verify_token")
     * @IsGranted("ROLE_USER")
     */
    public function verifyToken(User $user = null){
        return new JsonResponse([], 200);
    }

}

由@Jakumi 回答解决。错误是由 namespace AppBundle\EventListener 引起的。改成App\EventListener后错误消失。