2016-06-20 3 views
0

Entsprechend der L5 docs werden Events/Listener-Paare über Klassen erstellt. Aber nach ein paar kurzen Experimenten habe ich festgestellt, dass Sie auch Strings verwenden und die Event-Klasse überspringen können, was das Erstellen einfacher macht, weniger fehleranfällig ist (da keine Event-Klasse erstellt werden muss) und aussagekräftiger ist.String Ereignisse vs Klassen Ereignisse in L5.2, was ist besser?

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', 
    ], 
]; 

die String-Version über Verwendung bedeutet, dass die Datei App\Events\MyEvent nicht erstellt werden muss. Das ist eine Datei weniger, um die man sich kümmern muss, und eine Zeichenfolge für das Ereignis anstelle einer Klasse zu haben, macht es leichter, sich daran zu erinnern.

App \ Hörer \ 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 
} 

Feuer das Ereignis die gleiche Art und Weise würden Sie eine Klasse nur diesmal den String-Label verwenden.

Meine Frage ist, gibt es bestimmte Instanzen, in denen eine Klasse verwendet werden sollte, während in anderen Fällen eine Zeichenfolge verwendet werden könnte? Welchen zusätzlichen Nutzen hat die Verwendung von Event-Klassen (MyEvent) über String-Events?

Antwort

0

Ich würde nicht von einem bestimmten Ereignis wissen, wo Sie eine Klasse verwenden müssten. Klassen machen es einfach ein bisschen einfacher, bestimmte Logik zu enthalten. Sie können den Konstruktor auch verwenden, um zusätzliche Abhängigkeiten in die Ereignisklassen einzufügen. Sie sind wirklich nur da, um irgendwelche Methoden/Daten zu enthalten, die schließlich von jedem Zuhörer benötigt werden.

Beachten Sie, dass ein Ereignis viele Listener enthalten kann, von denen jeder möglicherweise andere Daten von der Ereignisklasse benötigt. Also, wenn Sie die Veranstaltung eine Menge feuern, wäre es einfacher, dass alle nicht innerhalb einer Klasse enthalten, als etwas zu tun, wie ...

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

Wenn Sie jemals einen anderen Hörer hinzufügen, die noch einen weiteren Parameter aus der erfordert Wenn Sie eine Klasse verwenden, müssen Sie sie nur um einen Platz ändern, der in dieser Klasse enthalten wäre.