Aller au contenu principal

Services et contrats d’exécution

Ces points d’entrée couvrent la génération programmée, l’enregistrement des flux, l’intégration au planificateur, la transformation scalaire et les champs facultatifs.

GeneratorService

DragonCode\LaravelFeed\Services\GeneratorService génère et publie un flux.

public function feed(Feed $feed, ?OutputStyle $output = null): GenerationResultData

La méthode publie toutes les parties comme une seule opération, met à jour la dernière activité de l’enregistrement, émet les événements du cycle de vie et renvoie les chemins avec le nombre d’enregistrements de chaque fichier. La résolution du disque et du chemin de sortie a lieu avant le début de la génération. Pour un flux ordinaire, les exceptions levées pendant cette vérification préalable, notamment UnsupportedStorageDiskException, sont propagées directement. Pour un flux configuré qui implémente HasFeedTargets, les échecs de la vérification préalable sont enveloppés dans FeedGenerationException afin de conserver la clé de cible. Une fois cette vérification réussie, les échecs de génération sont enveloppés pour chaque flux, avec l’exception d’origine comme exception précédente.

Résolvez le service via le conteneur Laravel au lieu de construire ses dépendances internes.

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 génère un flux configuré et n’énumère pas les cibles. Lors d’un appel direct, résolvez d’abord une cible :

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 gère les enregistrements persistants des flux.

MéthodeRésultat
`create(string $class, string $title, Expressionstring $expression = '0 * * * *', bool $isActive = true, array $extra = []): Feed`
find(int $id): FeedRenvoie un enregistrement ou lève FeedNotFoundException.
all(): BuilderRenvoie tous les enregistrements triés par identifiant.
active(): BuilderRenvoie les enregistrements actifs triés par identifiant.
setLastActivity(string $class): voidMet à jour last_activity pour une classe de flux.
delete(int $id): voidSupprime temporairement un enregistrement par identifiant.
deleteByClass(string $class): voidSupprime définitivement les enregistrements d’une classe, y compris ceux déjà supprimés.
restore(int $id): voidRestaure un enregistrement supprimé temporairement.

$expression accepte une chaîne d’expression cron brute, y compris les alias pris en charge par dragonmantank/cron-expression comme @daily, ou DragonCode\LaravelFeed\Scheduling\Expression. Les valeurs configurées avec l’API fluide sont converties en chaîne cron avant leur validation et leur persistance. La lecture du modèle renvoie la chaîne enregistrée. Consultez les expressions d’enregistrement pour voir un exemple.

Utilisez la migration ou l’opération de déploiement générée pour les changements habituels afin de les reproduire dans tous les environnements.

ScheduleFeedHelper

DragonCode\LaravelFeed\Helpers\ScheduleFeedHelper::register() ajoute les enregistrements actifs au planificateur Laravel. Chacun utilise son expression cron et un verrou anti-chevauchement. L’exécution en arrière-plan et la durée du verrou viennent de feeds.schedule.

L’enregistrement est ignoré sans erreur lorsque la table configurée n’existe pas.

Transformer

Implémentez DragonCode\LaravelFeed\Contracts\Transformer pour convertir les valeurs prises en charge avant leur sérialisation.

public function allow(mixed $value): bool public function transform(mixed $value): string

allow() indique si le transformateur accepte une valeur. transform() renvoie sa représentation scalaire sérialisée. Ajoutez la classe via Feed::transformers() ou feeds.transformers.

OptionalData

Renvoyez un nouvel objet DragonCode\LaravelFeed\Data\OptionalData pour un champ à omettre en l’absence de valeur. XML, RSS, JSON et JSON Lines l’omettent. CSV conserve la colonne et écrit un champ vide.

Voir aussi