Php 将数组用作事件的参数时出错
当我将数组作为参数传递给Php 将数组用作事件的参数时出错,php,laravel,event-listener,Php,Laravel,Event Listener,当我将数组作为参数传递给TeamMemberUpdate事件时,出现以下错误: 传递给App\Events\Event::_construct()的参数1必须是给定的App\Models\Model、illumb\Database\Eloquent\Collection的实例 以下是我发起活动的地方: $teamMembers = TeamMember::whereIn('email', $request->projectTeamEmails)->get(); event(new T
TeamMemberUpdate
事件时,出现以下错误:
传递给App\Events\Event::_construct()的参数1必须是给定的App\Models\Model、illumb\Database\Eloquent\Collection的实例
以下是我发起活动的地方:
$teamMembers = TeamMember::whereIn('email', $request->projectTeamEmails)->get();
event(new TeamMemberUpdating($teamMembers));
我的活动:
class TeamMemberUpdating
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $teamMembers;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(TeamMember $teamMembers)
{
$this->teamMembers = $teamMembers;
}
}
和我的侦听器handle()
方法:
public function handle(TeamMemberUpdating $event)
{
TeamMemberLog::insert($event->teamMembers);
}
您的事件类被定义为不处理数组,构造函数严格暗示
TeamMember的单个实例
public function __construct(TeamMember $teamMembers)
{
$this->teamMembers = $teamMembers;
}
您可以将其更改为:
public function __construct($teamMembers)
{
$this->teamMembers = $teamMembers;
}
这样一来,它既可以接受单个团队成员
,也可以接受团队成员的集合
。您可以执行instanceof
检查以确定传入的内容
或者,您可以更改派遣方法:
$teamMembers = TeamMember::whereIn('email', $request->projectTeamEmails)->get();
$teamMembers->each(function ($teamMember) {
event(new TeamMemberUpdating($teamMember));
});
这将为每个模型实例调度一个事件,而不是public function\uuu构造(TeamMember$teamMembers)
putpublic function\uu构造(Collection$teamMembers)
为避免混乱,侦听器处理程序也应该接受Collection,事件,当调用事件时,它应该类似于if(!($teamMembers instanceof Collection)){collect($teamMembers)}
应该在控制器的某个私有方法中。允许同一个构造函数变量(如这里的事件类)接受不同的类型不是一个好的做法。