这有效:
Event::listen('Illuminate\Console\Events\ArtisanStartin*', function ($event, $data = []) {
echo "event: $event\n";
});
但这会产生错误:
Event::listen('Illuminate\Console\Events\ArtisanStarting', function ($event, $data = []) {
echo "event: $event\n";
});
为什么?第一个输出event: Illuminate\Console\Events\ArtisanStarting
,第二个输出错误消息Object of class Illuminate\Console\Events\ArtisanStarting could not be converted to string
。应该以同样的方式工作。为什么需要通配符?我是否错误地注册了事件监听器?
答案 0 :(得分:0)
来自offical docs:
通配符侦听器将事件名称作为其第一个参数,并且 整个事件数据数组作为第二个参数。
如果希望在侦听器中使用“常规”事件的事件名称,则在分派它时必须手动传递它。在通配符侦听器中,事件名称会自动传递。