Aller au contenu principal
Version: 1.x

Flux et données

L’API principale sépare la source de données, le mappage des éléments, les métadonnées du flux, la structure de sortie et le résultat de la génération.

Feed​

DragonCode\LaravelFeed\Feeds\Feed est la classe de base d’un export. Implémentez builder() et ne remplacez que les points de sortie nécessaires au flux.

abstract public function builder(): Builder
MéthodeValeur par défautContrat
builder(): BuilderAbstraiteRenvoie la requête Eloquent utilisée comme source de données.
item(Model $model): FeedItemNouveau FeedItem de baseTransforme un modèle en élément de sortie.
transformers(): array[]Ajoute en tête les classes de transformateur de ce flux.
chunkSize(): int1000Taille des lots de la requête de base de données.
perFile(): int0Enregistrements par fichier. Zéro désactive le fractionnement par nombre.
maxFiles(): int0Nombre maximal de fichiers. Zéro signifie sans limite.
header(): stringDéclaration XML pour XML/RSSContenu écrit avant la racine et les éléments.
footer(): stringChaîne videContenu écrit après la racine et les éléments.
root(): ElementDataNom dérivé de la classeDéfinit l’élément racine et ses attributs.
info(): FeedInfoFeedInfo videDéfinit les informations du flux.
filename(): stringNom de fichier dérivé de la classeRenvoie le nom de sortie relatif au disque.
path($suffix): stringChemin résolu par l’adaptateurRenvoie un chemin local ou résolu par l’adaptateur.
storagePath($suffix): stringNom relatif au disqueRenvoie le chemin utilisé pour les opérations de stockage.
storage(): FilesystemAdapterDisque publicRésout et valide le disque Laravel.
format(): FeedFormatEnumXmlRenvoie le format de sortie configuré.
converterOptions(): array[]Renvoie les valeurs héritées de l’attribut Config pour ce flux ; les clés de l’enfant remplacent celles du parent.

Feed utilise Conditionable et Macroable de Laravel.

Cibles de flux​

DragonCode\LaravelFeed\Feeds\FeedTarget identifie une sortie générée indépendamment. Son constructeur accepte une clé non vide sous forme de chaîne et un tableau facultatif de paramètres :

public function __construct(public readonly string $key, public readonly array $parameters = [])

Implémentez DragonCode\LaravelFeed\Contracts\HasFeedTargets sur une classe de flux qui active explicitement les cibles. Le trait facultatif DragonCode\LaravelFeed\Concerns\InteractsWithFeedTargets implémente forTarget() et target() ; la classe du flux implémente la découverte des cibles :

MéthodeContrat
targets(): iterableRenvoie de manière différée chaque FeedTarget disponible pour les exécutions complètes de la commande et de la planification.
findTarget(string $key): ?FeedTargetRésout directement une cible explicite de la commande avec la même clé ou renvoie null.
forTarget(FeedTarget $target): staticRenvoie un clone configuré et réinitialise son nom de fichier mémorisé.
target(): FeedTargetRenvoie la cible configurée ou lève une LogicException lorsqu’aucune cible n’est définie.

Le constructeur rejette les clés vides ou composées uniquement de caractères d’espacement, mais ne normalise ni n’assainit les autres valeurs. Les paramètres de la cible sont opaques pour le paquet et sérialisés dans l’instantané d’un job de file d’attente. La clé constitue l’identité de la cible : elle doit donc être stable et unique dans la classe du flux. Consultez la configuration de fichiers de sortie séparés et la sélection dans la commande.

FeedItem et FeedInfo​

FeedItem reçoit le modèle Eloquent courant. Par défaut :

  • name() renvoie le nom de base de la classe du modèle en kebab case ;
  • attributes() renvoie un tableau vide ;
  • toArray() renvoie le tableau du modèle.

FeedInfo::toArray() renvoie un tableau vide. Les deux classes utilisent Conditionable et Macroable ; étendez-les si la sortie exige un schéma explicite.

Format des dates d’un élément​

Ajoutez #[DateFormat('Y-m-d H:i')] de DragonCode\LaravelFeed\Attributes\DateFormat à une classe FeedItem pour remplacer son format de date.

Renvoyez des valeurs brutes DateTimeInterface depuis toArray() et configurez les casts de date sur le modèle. Les chaînes déjà formatées ne sont pas reformatées :

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

L’attribut s’applique à tous les formats de sortie, y compris aux dates dans les structures JSON/XML imbriquées et aux dates renvoyées par attributes() pour les attributs d’élément XML/RSS.

La classe parente la plus proche portant l’attribut fournit le format hérité ; un attribut sur la classe enfant le remplace. L’attribut est prioritaire sur les formats de date propres au flux et globaux, tout en conservant feeds.date.timezone.

FeedInfo, les attributs racine et les autres éléments sans cet attribut conservent la chaîne de transformation configurée habituelle.

ElementData​

ElementData est un objet en lecture seule avec trois propriétés de constructeur :

PropriétéTypeValeur par défaut
name?stringnull
attributesarray[]
beforeInfobooltrue

Définissez name à null ou à une chaîne vide pour supprimer l’élément racine. Définissez beforeInfo à false pour écrire les informations du flux avant la racine.

Résultat de génération​

GeneratorService::feed() renvoie GenerationResultData. Sa propriété en lecture seule paths contient les fichiers publiés dans l’ordre de sortie. records associe chaque chemin au nombre d’enregistrements écrits dans ce fichier.

Les méthodes de génération et d’enregistrement programmatiques figurent dans Services et contrats d’exécution.

FeedFormatEnum​

CasValeur
Xmlxml
Jsonjson
JsonLinesjsonl
Csvcsv
Rssrss

Voir aussi​