我希望这个问题不会重复。我定义了以下事件:Event::listen('test', function(array $data){ dd($data);});当我尝试触发它时,我收到以下异常:event('test', [ 'foo' => 'bar', 'asdf' => 'ghjk',]);错误类型:传递给 {closure}() 的参数 1 必须是数组类型,给定对象但是,如果我按照以下方式执行,则不会出现问题:event('test', [[ 'foo' => 'bar', 'asdf' => 'ghjk',]]);问题:如果我想将严格数组传递给侦听器闭包,有没有办法避免将我的 var 包装在另一个数组中?
1 回答
回首忆惘然
TA贡献1847条经验 获得超11个赞
在深入研究了框架之后,我想我已经找到了“问题”。
您传递给侦听器的数组应该是回调的参数。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 包装在另一个数组中?”
- 1 回答
- 0 关注
- 98 浏览
添加回答
举报
0/150
提交
取消