我有一個Lumen控制器類,在創建用戶時觸發事件。我正在使用事件調度程序。事件被激發,但聽衆不處理事件。 我確定我已經遵循了Lumen文檔的每一步。Laravel/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);
}
}
因此,我基本上想要將用戶存儲到數據庫中,並在發生這種情況時觸發事件。
// UserCreated.php
class UserCreated extends Event
{
public $user;
public function __construct(User $user)
{
$this->user = $user;
}
}
該事件被解僱正確的,所以如果我把一個「回聲」或「的var_dump」到事件的構造函數中,我可以看到,它的工作原理。如果我對聆聽者如此相同,它就不會有反應。
// UserCreatedEmail.php
class UserCreatedEmail extends Listener
{
public function handle(UserCreated $event)
{
echo 'Hello?';
}
}
我已經在EventServiceProvider中註冊了它。
// EventServiceProvider.php
class EventServiceProvider extends ServiceProvider
{
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
UserCreated::class => [
UserCreatedEmail::class
]
];
}
並在bootstrap區域取消註釋。
// bootstrap/app.php
$app->register(WISSIT\UserService\Providers\EventServiceProvider::class);
我完全不知道爲什麼不起作用。我可以使用「$ event-> listen」,但當我使用測試時,它也會聽。根據Lumen文件,它也應該沒有這個工作。
是的,名稱空間設置正確。不,我不想使用Facades。
順便說一句,我的默認命名空間是不是 「應用程序」,它的 「WISSIT \ UserService」,但是這不應該的問題。 – Florian