Laravel/Lumen事件监听器不听

Flo*_*ian 2 php events listener lumen laravel-5.1

我有一个Lumen控制器类,可以在创建用户时触发事件.我正在使用事件调度程序.该事件应该被触发,但是侦听器不处理该事件.我确信我已经遵循了Lumen文档的每一步.

// UserController.php
class UserController extends ApiController
{
     protected $event = null;

     public function __construct(Dispatcher $event)
     {
         $this->event = $event;
     }

    /**
     * Store a newly created resource in storage.
     *
     * @param Request $request
     * @return Response
     */
    public function store(Request $request)
    {
         $this->acceptContentType($request, 'json');

         $this->input = $request->json()->all();
         $this->withEncryptedParameters();

         $this->validateParameterNames(array_keys($this->validationRules));
         $this->validateParameterContent($this->validationRules);

         $roles = $this->getRelationInput('roles');

         $user = User::create($this->input);
         $this->addRelation($user, $roles, Role::class, 'roles');

         $this->event->fire(new UserCreated($user));

         return $this->respondCreated($user->id);
     }
}
Run Code Online (Sandbox Code Playgroud)

所以我基本上想要将用户存储到数据库中并在发生这种情况时触发事件.

// UserCreated.php
class UserCreated extends Event
{
    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}
Run Code Online (Sandbox Code Playgroud)

事件被正确触发,所以如果我将"echo"或"var_dump"放入事件的构造函数中,我可以看到它有效.如果我对听众如此相同,它就没有反应.

// UserCreatedEmail.php
class UserCreatedEmail extends Listener
{
    public function handle(UserCreated $event)
    {
        echo 'Hello?';
    }
}
Run Code Online (Sandbox Code Playgroud)

我在EventServiceProvider中注册了它.

// EventServiceProvider.php
class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        UserCreated::class => [
            UserCreatedEmail::class
        ]
    ];
}
Run Code Online (Sandbox Code Playgroud)

并在引导区域取消注释.

// bootstrap/app.php    
$app->register(WISSIT\UserService\Providers\EventServiceProvider::class);
Run Code Online (Sandbox Code Playgroud)

我完全不知道为什么不起作用.我可以使用"$ event-> listen"但是当我使用测试时它也会听.根据Lumen文档,它应该没有它.

是的,命名空间设置正确.不,我不想使用Facades.

Don*_*man 11

在"注册服务提供商"下的bootstrap/app.php中注释掉服务提供商的注册.

// $app->register(App\Providers\EventServiceProvider::class);
Run Code Online (Sandbox Code Playgroud)

$app->register(App\Providers\EventServiceProvider::class);
Run Code Online (Sandbox Code Playgroud)