Feeds und Daten
Die Kern-API trennt Datenquelle, Elementabbildung, Metadaten des Feeds, Ausgabestruktur und Generierungsergebnis.
Feed
DragonCode\LaravelFeed\Feeds\Feed ist die Basisklasse eines Exports. Implementieren Sie builder() und überschreiben Sie nur die Ausgabepunkte, die der Feed benötigt.
abstract public function builder(): Builder
| Methode | Standard | Vertrag |
|---|---|---|
builder(): Builder | Abstrakt | Gibt die Eloquent-Abfrage als Datenquelle zurück. |
item(Model $model): FeedItem | Neues Basis-FeedItem | Bildet ein Modell auf ein Ausgabeelement ab. |
transformers(): array | [] | Stellt Transformer-Klassennamen für diesen Feed voran. |
chunkSize(): int | 1000 | Chunk-Größe der Datenbankabfrage. |
perFile(): int | 0 | Datensätze pro Datei. Null deaktiviert die Aufteilung nach Anzahl. |
maxFiles(): int | 0 | Maximale Anzahl der Ausgabedateien. Null bedeutet ohne Begrenzung. |
header(): string | XML-Deklaration für XML/RSS | Inhalt vor dem Wurzelelement und den Elementen. |
footer(): string | Leere Zeichenfolge | Inhalt nach dem Wurzelelement und den Elementen. |
root(): ElementData | Aus der Klasse abgeleiteter Elementname | Definiert Wurzelelement und Attribute. |
info(): FeedInfo | Leeres FeedInfo | Definiert Informationen auf Feed-Ebene. |
filename(): string | Aus der Klasse abgeleiteter Dateiname | Gibt den datenträgerrelativen Ausgabedateinamen zurück. |
path($suffix): string | Vom Adapter aufgelöster Pfad | Gibt einen lokalen oder vom Adapter aufgelösten Pfad zurück. |
storagePath($suffix): string | Datenträgerrelativer Dateiname | Gibt den Pfad für Speichervorgänge zurück. |
storage(): FilesystemAdapter | Datenträger public | Löst den Laravel-Datenträger auf und prüft ihn. |
format(): FeedFormatEnum | Xml | Gibt das konfigurierte Ausgabeformat zurück. |
converterOptions(): array | [] | Gibt die vererbten Config-Attributwerte für diesen Feed zurück; untergeordnete Schlüssel überschreiben übergeordnete Schlüssel. |
Feed verwendet Laravel Conditionable und Macroable.
Feed-Ziele
DragonCode\LaravelFeed\Feeds\FeedTarget kennzeichnet eine eigenständig erzeugte Ausgabe. Sein Konstruktor akzeptiert einen nicht leeren Zeichenfolgenschlüssel und ein optionales Parameterarray:
public function __construct(public readonly string $key, public readonly array $parameters = [])
Implementieren Sie DragonCode\LaravelFeed\Contracts\HasFeedTargets in einer Feed-Klasse mit expliziter Zielunterstützung. Der optionale Trait DragonCode\LaravelFeed\Concerns\InteractsWithFeedTargets implementiert forTarget() und target(); die Feed-Klasse implementiert die Zielermittlung:
| Methode | Vertrag |
|---|---|
targets(): iterable | Gibt verzögert jedes verfügbare FeedTarget für vollständige Befehls- und Zeitplanläufe zurück. |
findTarget(string $key): ?FeedTarget | Löst ein explizites Befehlsziel mit demselben Schlüssel direkt auf oder gibt null zurück. |
forTarget(FeedTarget $target): static | Gibt einen konfigurierten Klon zurück und setzt dessen zwischengespeicherten Dateinamen zurück. |
target(): FeedTarget | Gibt das konfigurierte Ziel zurück oder löst eine LogicException aus, wenn kein Ziel gesetzt ist. |
Der Konstruktor weist leere Schlüssel und Schlüssel nur aus Leerraum zurück, normalisiert oder bereinigt andere Werte jedoch nicht. Zielparameter werden vom Paket nicht ausgewertet und als Snapshot eines Queue-Jobs serialisiert. Der Schlüssel ist die Identität des Ziels und muss daher innerhalb der Feed-Klasse stabil und eindeutig sein. Siehe Einrichtung separater Ausgabedateien und Zielauswahl im Befehl.
FeedItem und FeedInfo
FeedItem erhält das aktuelle Eloquent-Modell. Standardmäßig gilt:
name()gibt den Basisnamen der Modellklasse in Kebab-Schreibweise zurück;attributes()gibt ein leeres Array zurück;toArray()gibt das Modellarray zurück.
FeedInfo::toArray() gibt ein leeres Array zurück. Beide Klassen verwenden Conditionable und Macroable; erweitern Sie sie, wenn die Ausgabe ein explizites Schema benötigt.
Datumsformat eines Elements
Fügen Sie #[DateFormat('Y-m-d H:i')] aus DragonCode\LaravelFeed\Attributes\DateFormat einer FeedItem-Klasse hinzu, um ihr Datumsformat zu überschreiben.
Geben Sie unverarbeitete DateTimeInterface-Werte aus toArray() zurück und konfigurieren Sie Datums-Casts im Modell. Bereits formatierte Zeichenfolgen werden nicht erneut formatiert:
namespace App\Feeds\Items;
use DragonCode\LaravelFeed\Attributes\DateFormat;
use DragonCode\LaravelFeed\Feeds\Items\FeedItem;
#[DateFormat('Y-m-d H:i')]
class ProductFeedItem extends FeedItem
{
public function toArray(): array
{
return [
'finishedAt' => $this->model->finished_at,
'createdAt' => $this->model->created_at,
'updatedAt' => $this->model->updated_at,
];
}
}
Das Attribut gilt für jedes Ausgabeformat, einschließlich Datumswerten in verschachtelten JSON/XML-Strukturen und Datumswerten aus attributes() für XML/RSS-Elementattribute.
Die nächste übergeordnete Klasse mit dem Attribut liefert das geerbte Format; ein Attribut in der untergeordneten Klasse überschreibt es. Das Attribut hat Vorrang vor feedspezifischen und globalen Datumsformaten, während feeds.date.timezone erhalten bleibt.
FeedInfo, Wurzelattribute und andere Elemente ohne dieses Attribut verwenden weiterhin die normale konfigurierte Transformationskette.
ElementData
ElementData ist ein schreibgeschütztes Objekt mit drei Konstruktoreigenschaften:
| Eigenschaft | Typ | Standard |
|---|---|---|
name | ?string | null |
attributes | array | [] |
beforeInfo | bool | true |
Setzen Sie name auf null oder eine leere Zeichenfolge, um das Wurzelelement zu unterdrücken. Setzen Sie beforeInfo auf false, um Feed-Informationen vor das Wurzelelement zu schreiben.
Generierungsergebnis
GeneratorService::feed() gibt GenerationResultData zurück. Die schreibgeschützte Eigenschaft paths enthält die veröffentlichten Dateien in Ausgabereihenfolge. records ordnet jedem Pfad die Anzahl der in diese Datei geschriebenen Datensätze zu.
Methoden zur programmgesteuerten Generierung und Registrierung finden Sie unter Laufzeitdienste und Verträge.
FeedFormatEnum
| Fall | Wert |
|---|---|
Xml | xml |
Json | json |
JsonLines | jsonl |
Csv | csv |
Rss | rss |