Meine persönliche Meinung ist, dass es in der Regel eine schlechte Praxis ist Event-Listener einen Topf zu werfen in ein einzelner Ort. Sicher, heute brauchst du nur noch 2 oder 3, aber der Umfang kann jederzeit zu jedem Projekt hinzugefügt werden, was viel mehr hinzufügen kann.
Stattdessen erstelle ich im Allgemeinen ein Verzeichnis unter dem Verzeichnis app
(z. B. app/CompanyName
) und setzen Sie alle meine Anwendung spezifischen Code dort. Sagen Laravel, wie Sie Ihre Dateien zu finden, Sie können dann Ihre composer.json llike dieses Update:
"autoload": {
"classmap": [
// ...
],
"psr-4": {
"CompanyName\\" : "app/"
},
}
Danach, sollten Sie composer dump-autoload
laufen.
Jetzt können Sie Namespace-Verzeichnisse innerhalb Ihrer benutzerdefinierten Anwendungsverzeichnis, wie app/CompanyName/Events/
, und in der Lage zu entmischen aus Ihrer Veranstaltung Zuhörer in Gruppen, die Sinn machen, erstellen und sie zum Beispiel im Inneren eines Dienstleisters, setzen:
<?php namespace CompanyName/Events;
// File: app/CompanyName/Events/LogEventsProvider.php
use Illuminate\Support\ServiceProvider;
class LogEventsProvider extends ServiceProvider
{
public function register()
{
Event::listen('log.create', 'CompanyName/Events/[email protected]');
}
public function create()
{
// ...
}
}
Jetzt können Sie diesen Service-Provider zu Ihrem app/config/app.php
hinzufügen und gut sein, zu gehen und alle Ihre damit verbundenen Ereignis-Listener in einer einzigen Datei, und alle Ihre Event-Listener in einem einzigen Verzeichnis, aber getrennt, so dass, wenn etwas schief läuft mit einem von ihnen müssen Sie nicht durch alle von ihnen suchen, um zu finden, wo der Fehler geschieht.
NB: Ich kam nicht als eine Übung, aber ich fand es irgendwo auf dem Weg. Ich kann mich jedoch nicht erinnern, wo es war.
Danke, das hat für mich funktioniert! – Strernd
+1 Netter Vorschlag. Aber ich frage mich, ob es noch eine andere interessante Alternative gibt ... vielleicht einen "app/listeners" -Ordner für Class-Listener zu erstellen ...? Und '' app_path(). '/ Listeners', 'zu' ClassLoader :: addDirectories (array ('unter' app/start/global.php' ...? –
Ich denke, das würde für die Handler funktionieren, aber seit der Listener sind eigentlich keine Klassen Ich glaube nicht, dass sie jemals geladen werden werden –