Mittels Modell-Ereignisse Listener in Laravel 5
Möchte ich sicherstellen, dass ich richtig Modell-Ereignisse Listener in Laravel 5 und ich habe nicht versaut nichts (vs listener handler?). Meine Lösung funktioniert gut, aber ich Frage mich, ob ich entwickelte nach Konzept und die Konvention von Laravel 5.
Ziel:
Setzen Sie sich immer ein $Problem->status_id auf einen Wert ein, wenn Sie Modell speichern.
In app\Providers\EventServiceProvider.php
<?php namespace App\Providers;
...
class EventServiceProvider extends ServiceProvider {
...
public function boot(DispatcherContract $events)
{
parent::boot($events);
Issue::saving('App\Handlers\Events\SetIssueStatus');
}
}
In app\Handlers\Events\SetIssueStatus.php
<?php namespace App\Handlers\Events;
...
class SetIssueStatus {
...
public function handle(Issue $issue)
{
if (something)
{
$issueStatus = IssueStatus::where(somethingElse)->firstOrFail();
}
else
{
$issueStatus = IssueStatus::where(somethingAnother)->firstOrFail();
}
//issue_status() is One-to-One relations with IssueType (belongsTo)
$issue->issue_status()->associate($issueStatus);
}
}
Vielen Dank für Ihre Zeit.
- möchten Sie nur verwenden Sie dieses Ereignis, auf ein Modell, oder wollen Sie es verwenden, mehr als ein Modell?
- Diese Logik ($Frage->status_id) ich möchte nur für die Ausgabe von Modell, aber in Zukunft möchte ich hinzufügen, mehr Logik, um diese und andere Modell.
- Es gibt keine richtige oder falsche Antwort für diese; es hängt von der Anwendung ab. Daher, die Abstimmung zu schließen, und es ist vor allem Meinung-basiert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als Sie sagten, Sie haben eine funktionierende version und es ist eine gültige, nun, das ist bis zu Ihnen, um herauszufinden, ob es ok für Sie.
Nur zur Klarstellung, ich sage nicht, dass diese besser sind Lösungen, Sie sind nur einen gültigen unterschiedliche Weise.
Da das, was Sie tun, ist spezifisch für die Ausgabe von Modell-oder zumindest scheint es nicht zu sein, ein generisches Ereignis, Sie könnten richtete ihn auf auf Ihrem Modell direkt
aber wenn Ihre Veranstaltung ist in der Tat ein generisches und Sie es verwenden möchten, der über mehrere Modelle, Sie könnte erreichen die gleiche Sache. Sie müssen nur extrahieren Sie den Programmcode aus dem Modell, und verwenden Eigenschaften (wie Sie mit weichen löscht)
Zunächst erstellen wir unser Merkmal(in diesem Fall haben wir die Wurzeln unserer App), und extrahieren Sie den code, den ich schrieb, bevor, aus dem Modell:
Nun auf die Modelle, in denen Sie es verwenden möchten, Sie einfach importieren Sie die Eigenschaft, und deklarieren Sie es verwenden:
Nun diese Letzte option, die ich dir gezeigt habe, ist es eine generische option, die Sie haben, die Sie anwenden könnten, um jedes Modell, das nur durch die Deklaration es ist zu verwenden, auf der Oberseite des Modells.