Laufzeitdienste und Verträge
Diese Einstiegspunkte unterstützen programmgesteuerte Generierung, Feed-Registrierung, Scheduler-Integration, skalare Transformation und optionale Felder.
GeneratorService
DragonCode\LaravelFeed\Services\GeneratorService erzeugt und veröffentlicht einen Feed.
public function feed(Feed $feed, ?OutputStyle $output = null): GenerationResultData
Die Methode veröffentlicht alle Teile als einen Vorgang, aktualisiert die letzte Aktivität der Registrierung, löst Lebenszyklusereignisse aus und gibt Pfade mit der Anzahl der Datensätze pro Datei zurück. Der Datenträger und der Ausgabepfad werden vor Beginn der Generierung aufgelöst. Bei einem normalen Feed werden Ausnahmen aus dieser Vorabprüfung, einschließlich UnsupportedStorageDiskException, direkt ausgelöst. Bei einem konfigurierten Feed, der HasFeedTargets implementiert, werden Fehler der Vorabprüfung in FeedGenerationException eingeschlossen, damit der Zielschlüssel verfügbar bleibt. Nach erfolgreicher Vorabprüfung werden Generierungsfehler für jeden Feed eingeschlossen; die ursprüngliche Ausnahme bleibt als vorherige Ausnahme erhalten.
Lösen Sie den Dienst über Laravels Container auf, anstatt seine internen Abhängigkeiten selbst zu erstellen.
use App\Feeds\UserFeed;
use DragonCode\LaravelFeed\Services\GeneratorService;
$result = app(GeneratorService::class)->feed(app(UserFeed::class));
foreach ($result->records as $path => $count) {
processFeedResult($path, $count);
}
GeneratorService erzeugt einen konfigurierten Feed und zählt keine Ziele auf. Lösen Sie bei einem direkten Aufruf zuerst ein Ziel auf:
use App\Feeds\PartnerFeed;
use DragonCode\LaravelFeed\Services\GeneratorService;
use RuntimeException;
$feed = app(PartnerFeed::class);
$target = $feed->findTarget('42')
?? throw new RuntimeException('Feed target [42] not found.');
$result = app(GeneratorService::class)->feed(
$feed->forTarget($target),
);
FeedQuery
DragonCode\LaravelFeed\Queries\FeedQuery verwaltet gespeicherte Feed-Registrierungen.
| Methode | Ergebnis |
|---|---|
| `create(string $class, string $title, Expression | string $expression = '0 * * * *', bool $isActive = true, array $extra = []): Feed` |
find(int $id): Feed | Gibt eine Registrierung zurück oder löst FeedNotFoundException aus. |
all(): Builder | Gibt alle Registrierungen nach ID sortiert zurück. |
active(): Builder | Gibt aktive Registrierungen nach ID sortiert zurück. |
setLastActivity(string $class): void | Aktualisiert last_activity für eine Feed-Klasse. |
delete(int $id): void | Löscht eine Registrierung anhand der ID vorläufig. |
deleteByClass(string $class): void | Entfernt Registrierungen einer Klasse einschließlich gelöschter Zeilen endgültig. |
restore(int $id): void | Stellt eine vorläufig gelöschte Registrierung wieder her. |
$expression akzeptiert einen direkten Cron-Ausdruck als Zeichenfolge einschließlich von dragonmantank/cron-expression unterstützter Aliase wie @daily oder DragonCode\LaravelFeed\Scheduling\Expression. Mit der Fluent-API konfigurierte Werte werden vor der Validierung und Speicherung in ihre Cron-Zeichenfolge umgewandelt. Beim Lesen des Modells wird die gespeicherte Zeichenfolge zurückgegeben. Ein Beispiel finden Sie unter Registrierungsausdrücke.
Verwenden Sie für normale Registrierungsänderungen die erzeugte Migration oder Deployment-Operation, damit sie in allen Umgebungen reproduzierbar bleiben.
ScheduleFeedHelper
DragonCode\LaravelFeed\Helpers\ScheduleFeedHelper::register() fügt aktive Registrierungen zum Laravel-Scheduler hinzu. Jede Registrierung verwendet ihren gespeicherten Cron-Ausdruck und eine Überlappungssperre. Hintergrundausführung und Sperrzeit stammen aus der Konfiguration feeds.schedule.
Die Registrierung wird sicher übersprungen, wenn die konfigurierte Feed-Tabelle nicht existiert.
Transformer
Implementieren Sie DragonCode\LaravelFeed\Contracts\Transformer, um unterstützte Werte vor der Serialisierung umzuwandeln.
public function allow(mixed $value): bool
public function transform(mixed $value): string
allow() entscheidet, ob der Transformer einen Wert annimmt. transform() gibt seine serialisierte skalare Darstellung zurück. Fügen Sie die Klasse über Feed::transformers() oder feeds.transformers hinzu.
OptionalData
Geben Sie für ein Feld, das bei fehlendem Wert ausgelassen werden soll, ein neues DragonCode\LaravelFeed\Data\OptionalData zurück. XML, RSS, JSON und JSON Lines lassen das Feld aus. CSV behält die Spalte bei und schreibt ein leeres Feld.