字符串事件与L5.2中的类事件,哪个更好?

时间:2016-06-20 21:06:26

标签: laravel events

根据L5 docs,事件/监听器对是通过类创建的。但经过一些快速的实验,我发现你也可以使用字符串并完全跳过Event类,使其更容易制作,更不容易出错(因为没有要创建的Event类),而且更具描述性。

EventServiceProvider

// Class
protected $listen = [
    'App\Events\MyEvent' => [
        'App\Listeners\MyListener',
    ],
];

... becomes ...

// String
// Replace App\Events\MyEvent with a string which describes your event
protected $listen = [
    'eventaction' => [
        'App\Listeners\MyListener',
    ],
];

使用上面的字符串版本意味着不需要创建文件App\Events\MyEvent。这是一个不用担心的文件,并为事件而不是类提供字符串,这样可以更容易记住。

应用\监听\ 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]);

我的问题是是否存在应该使用类的特定实例,而在其他实例中可以使用字符串?使用Event类(MyEvent)对字符串事件有什么额外的好处?

1 个答案:

答案 0 :(得分:0)

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

请记住,一个事件可能有许多侦听器,每个侦听器可能需要来自事件类的不同数据。所以,如果你要激活很多事件,那么在一个类中包含所有内容会更容易,而不是像...那样做...

event('logout', [$param, $otherParam, $otherOtherParam]);

如果您要添加另一个需要该事件中另一个参数的侦听器,那么您需要遍历所有代码以添加其他参数,如果您使用类,则只需将其更改为一个地方即可在那个班里。