Php 为什么laravel事件侦听器需要通配符?
这项工作:Php 为什么laravel事件侦听器需要通配符?,php,laravel,events,laravel-5,Php,Laravel,Events,Laravel 5,这项工作: Event::listen('Illuminate\Console\Events\ArtisanStartin*', function ($event, $data = []) { echo "event: $event\n"; }); 但这会产生一个错误: Event::listen('Illuminate\Console\Events\ArtisanStarting', function ($event, $data = [])
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";
});
为什么呢?第一个输出<代码>事件:Illumb\Console\Events\ArtisStarting,第二个输出错误消息<代码>类Illumb\Console\Events\ArtisStarting的对象无法转换为字符串。两者的工作方式应该相同。为什么需要通配符?我是否注册了错误的事件侦听器?来自:
通配符侦听器接收事件名称作为其第一个参数,并且
将整个事件数据数组作为其第二个参数
如果希望“常规”事件的事件名称在侦听器中可用,则必须在分派时手动传递它。在通配符侦听器中,事件名称会自动传递。如果由于ur echo而出现错误,请尝试打印($event);在我们的第二个例子中。@arunkumar啊,是的,这使它将事件检测为对象而不是字符串;我真傻,没注意到。但是,问题仍然是,为什么通配符会导致这种变化?