Laravel:事件监听器 - 传递给 {closure}() 的参数 1 必须是数组类型,给定对象

我希望这个问题不会重复。


我定义了以下事件:


Event::listen('test', function(array $data){

    dd($data);

});

当我尝试触发它时,我收到以下异常:


event('test', [

    'foo' => 'bar',

    'asdf' => 'ghjk',

]);

错误类型:


传递给 {closure}() 的参数 1 必须是数组类型,给定对象


但是,如果我按照以下方式执行,则不会出现问题:


event('test', [[

    'foo' => 'bar',

    'asdf' => 'ghjk',

]]);

问题:如果我想将严格数组传递给侦听器闭包,有没有办法避免将我的 var 包装在另一个数组中?


慕的地10843
浏览 99回答 1
1回答

回首忆惘然

在深入研究了框架之后,我想我已经找到了“问题”。您传递给侦听器的数组应该是回调的参数。IE)Event::listen('test', function($foo, $bar, $baz) {    dd($foo, $bar, $baz);});event('test', ['foo', 'bar', 'baz']);当你将一个数组传递给 event() 帮助器时,它最终会调用 Illuminate\Events\Dispatcher 中的 makeListener 来执行你的闭包。在该方法中,它调用您的侦听器,如下所示:    return $listener(...array_values($payload));那么原因是:event('test', [[    'foo' => 'bar',    'asdf' => 'ghjk',]]);有效,是因为:...array_values([[    'foo' => 'bar',    'asdf' => 'ghjk',]])就是 ['foo' => 'bar', 'asdf' => 'ghjk']希望有帮助!其中之一就是找到正确的文档!所以回答你的终极问题:“问题:如果我想将严格数组传递给侦听器闭包,有没有办法避免将我的 var 包装在另一个数组中?”
打开App,查看更多内容
随时随地看视频慕课网APP