L5.2中的字符串事件与类事件,这更好



根据L5文档,事件/侦听器对通过类创建。但是经过一些快速的实验,我发现您也可以使用字符串并跳过事件类,使其更容易制作,更容易出现错误(因为没有事件类别可以创建),并且更具描述性。

EventerviceProvider

// Class
protected $listen = [
    'AppEventsMyEvent' => [
        'AppListenersMyListener',
    ],
];
... becomes ...
// String
// Replace AppEventsMyEvent with a string which describes your event
protected $listen = [
    'eventaction' => [
        'AppListenersMyListener',
    ],
];

使用上面的字符串版本意味着不需要创建文件AppEventsMyEvent。这是一个少要担心的文件,而不是为事件而不是类的字符串,这使得更容易记住。

app listerers mylistener

// Class
public function handle(MyEvent $event)
{
    // Do something
}
... becomes ...
// String
// Remove the data type in $event so it'll accept a string
public function handle($event)
{
    // Do something
}

以相同的方式启动事件,只有这次使用字符串标签。

event('eventaction', [$event]);

我的问题是在其他情况下使用字符串时应使用类的特定实例?事件类的使用(MyEvent)对字符串事件有什么其他好处?

我不知道您必须使用类的任何特定事件。课程只会使包含某些逻辑更容易。您也可以使用构造函数将其他依赖项注入事件类中。他们实际上只是在那里包含任何听众最终需要的方法/数据。

请记住,一个事件可以让许多听众每个侦听器可能需要与事件类别类别的数据。因此,如果您经常发射活动,那么在班级中包含所有内容而不是做类似...

之类的事情会更容易
event('logout', [$param, $otherParam, $otherOtherParam]);

如果您添加了另一个需要事件中另一个参数的侦听器,那么您需要浏览所有代码以添加附加参数,如果您使用类,则只需要更改它在该课程中。

相关内容

最新更新