当有人在我的系统上收藏实体时,我会触发一个事件。这是使用Event::fire(new AddedAsFav($entity_id));
。
在那种情况下,我想提取一些关于$entity_id
的信息。要做到这一点,我相信我需要传递$entity_id
作为我的监听器的构造函数的一部分,然后我可以访问它。不幸的是构造函数需要一个类型,我似乎无法传递一个整数。文档中有许多示例,它们传递Eloquent ORM实例,例如,前缀为类的名称(Entity $entity
)。但我不想传递一个完整的对象,只是一个ID,因为它来自的控制器只有一个ID。我宁愿在事件本身中进行查询(这是昂贵且耗时的,因此事件)。
那么如何传递和访问基本的int?
这是我的听众:
<?php
namespace App\Listeners;
use App\Events\AddedAsFav;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class GetFullEntity
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct(int $entity_id)
{
$this->entity_id = $entity_id;
}
/**
* Handle the event.
*
* @param MovieAddedAsToWatch $event
* @return void
*/
public function handle(AddedAsFav $event)
{
dd($event);
}
}
答案 0 :(得分:1)
如果您事件文件中有public $entity_id
,那么您将能够在倾听者的 handle
方法中获取该值,就像这样:$event->entity_id
。
答案 1 :(得分:1)
您只需输入您可能想要在侦听器中使用的某些内容。
如果您只想访问传递给事件类的数据/对象/数组,请将其分配给事件类中的公共属性:
class AddedAsFav extends Event
{
public $entity_id;
public function __construct($entity_id)
{
$this->entity_id = $entity_id;
}
}
您现在可以像在任何属性中一样在监听器中访问它:
<?php
namespace App\Listeners;
use App\Events\AddedAsFav;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class GetFullEntity
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
}
/**
* Handle the event.
*
* @param MovieAddedAsToWatch $event
* @return void
*/
public function handle(AddedAsFav $event)
{
$entity_id = $event->entity_id;
}
}