因此,根据laravel事件文档,在定义侦听器时,它可以在其handle方法中接收事件实例并执行任何必要的逻辑:
public function handle(FoodWasPurchased $event)
Run Code Online (Sandbox Code Playgroud)
因此,如果我的FoodWasPurchased事件定义如下(假设设置了EventServiceProvider):
public function __construct(Food $food)
{
$this->food = $food;
}
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式从听众那里获取$ food
$event->food->doSomething();
Run Code Online (Sandbox Code Playgroud)
但现在我的问题是如果听众听多个事件怎么办?
Event FoodWasPurchased -> Listener Bill
Event DrinksWasPurchased -> Listener Bill
Run Code Online (Sandbox Code Playgroud)
我现在做的是我没有在监听器句柄方法中指定事件实例:
public function handle($event)
Run Code Online (Sandbox Code Playgroud)
我可以在以后使用if条件来检查$ event中收到的内容:
if (isset($event->food)) {
// Do something...
} elseif (isset($event->drinks)) {
// Do something else...
}
Run Code Online (Sandbox Code Playgroud)
我相信有更好的方法.
或者最佳做法是确保一个监听器只监听一个事件?