Aller au contenu principal
Version: 1.x

← Précédent · Retour au README · Suivant →

Génération et planification

Pour générer tous les flux actifs, utilisez la commande suivante :

php artisan feed:generate

Tous les flux actifs (is_active = true) de la table feeds, ou de celle indiquée dans le fichier config/feeds.php, seront alors exécutés.

astuce

Lorsque vous appelez la commande sans paramètre, la console affiche des liens vers tous les flux, y compris ceux dont la propriété is_active vaut false.

Ces flux ne sont toutefois pas exécutés : ils sont marqués avec le statut SKIP.

Flux unique​

attention

Le flux indiqué sera exécuté, même s’il est désactivé dans la table feeds de la base de données.

Pour générer un flux particulier, appelez la commande feed:generate en lui passant comme paramètre le slug du flux dans la table feeds :

php artisan feed:generate products

Générer les fichiers de sortie sélectionnés​

Pour un flux configuré avec des fichiers de sortie séparés, le slug d’enregistrement sélectionne la classe du flux et la clé de cible sélectionne un partenaire, une boutique, un paramètre régional ou une autre sortie.

L’exécution du flux sans --target consomme targets() de manière différée et génère toutes les cibles :

php artisan feed:generate products

Passez l’option répétable --target pour ne générer que les cibles sélectionnées :

php artisan feed:generate products --target=42
php artisan feed:generate products --target=42 --target=81

Les clés explicites utilisent findTarget() au lieu d’énumérer targets(). Les clés en double sont traitées une seule fois, dans l’ordre de leur première apparition. Toutes les clés demandées sont résolues avant le début de la génération.

--target exige un seul slug d’enregistrement de flux. La commande rejette les clés vides ou inconnues, ainsi que la sélection de cibles pour un flux qui n’implémente pas HasFeedTargets.

L’énumération complète des cibles est traitée en continu et n’est pas atomique. Si targets() échoue après avoir produit certaines valeurs, les cibles précédentes peuvent déjà avoir été générées ou placées dans la file d’attente. Un itérable vide ne génère rien et ne crée aucune cible par défaut implicite.

Sortie pour les agents d’IA​

Lorsque feed:generate s’exécute dans un agent de codage IA reconnu par Laravel Agent Detector, la commande écrit automatiquement un seul objet JSON au lieu des barres de progression et des lignes d’état formatées. Aucune option de commande n’est requise. En dehors d’un agent reconnu, la sortie habituelle de la console reste inchangée.

Lors d’une génération directe, chaque flux généré contient tous les fichiers publiés et leur nombre d’enregistrements :

{
"tool": "feed:generate",
"result": "success",
"feeds": [
{
"class": "App\\Feeds\\SitemapFeed",
"status": "generated",
"files": [
{
"path": "/var/www/html/storage/app/public/sitemap.xml",
"records": 1250
}
]
},
{
"class": "App\\Feeds\\DisabledFeed",
"status": "skipped"
}
]
}

La commande émet un JSON compact sur une seule ligne. L’exemple est mis en forme uniquement pour faciliter la lecture.

StatutSignificationChamps supplémentaires
generatedLes fichiers du flux ont été générés directement.files, avec path et records pour chaque fichier
queuedLe mode file d’attente est activé et le job du flux a été exécuté de manière synchrone pour l’agent.Aucun
skippedLe flux est inactif et la commande a été exécutée sans slug de flux.Aucun

Chaque entrée ciblée generated ou queued contient également un champ target avec la clé sélectionnée.

remarque

En mode file d’attente, le chemin propre à l’agent exécute chaque job actif de manière synchrone avant de renvoyer le résultat JSON. Le chemin habituel, formaté pour les humains, continue d’envoyer les jobs via la connexion de file d’attente configurée.

Cette enveloppe JSON est utilisée uniquement pour les exécutions réussies. Si la génération lève une exception, Laravel traite normalement l’erreur de la commande et n’émet aucune enveloppe d’erreur JSON.

File d’attente​

Par défaut, la génération des flux s’exécute dans le processus de console. Pour les flux longs à générer ou gourmands en mémoire, activez le mode Laravel Queue dans votre environnement :

FEED_QUEUE_ENABLED=true
FEED_QUEUE_CONNECTION=redis
FEED_QUEUE_NAME=feeds
FEED_QUEUE_UNIQUE_TTL=3600

Lorsque le mode file d’attente est activé, feed:generate envoie un job pour chaque flux ordinaire actif et un job pour chaque cible sélectionnée d’un flux ciblé. Avec une connexion asynchrone, la commande se termine après l’envoi des jobs. Démarrez un worker de file d’attente pour la connexion et la file sélectionnées afin de traiter ces jobs.

  • FEED_QUEUE_CONNECTION sélectionne la connexion de file d’attente. À défaut, QUEUE_CONNECTION, puis database, sont utilisés.
  • FEED_QUEUE_NAME sélectionne une file sur cette connexion. Laissez cette variable non définie pour utiliser la file par défaut de la connexion.
  • FEED_QUEUE_UNIQUE_TTL définit en secondes la durée de vie maximale du verrou d’unicité. Les jobs ordinaires sont uniques selon la classe du flux. Les jobs ciblés sont uniques selon la classe du flux et la clé de cible ; les paramètres de la cible ne modifient pas cette identité.
remarque

La connexion sync exécute immédiatement chaque job dans le processus de console. Sélectionnez une connexion asynchrone pour transférer la génération à un worker. Définissez FEED_QUEUE_ENABLED=false pour générer directement les flux sans envoyer de jobs.

Planification​

Expression d’enregistrement​

Lors de la création d’un enregistrement de flux, transmettez soit une chaîne d’expression cron brute, soit un objet DragonCode\LaravelFeed\Scheduling\Expression configuré avec l’API fluide.

use App\Feeds\ProductFeed;
use DragonCode\LaravelFeed\Queries\FeedQuery;
use DragonCode\LaravelFeed\Scheduling\Expression;

app(FeedQuery::class)->create(
class: ProductFeed::class,
title: 'Products',
expression: (new Expression)
->weekly()
->mondays()
->at('13:00'),
);

L’exemple avec l’API fluide enregistre 0 13 * * 1. Les chaînes brutes, y compris les alias pris en charge par dragonmantank/cron-expression comme @daily, restent acceptées.

Les méthodes disponibles dans l’API fluide suivent les options de fréquence de la version de Laravel installée. Consultez la référence des fréquences de Laravel 13 pour connaître la liste actuelle. Seules les méthodes dont le résultat peut être enregistré sous la forme d’une expression cron stable à cinq champs sont exposées. Les intervalles inférieurs à une minute, les fuseaux horaires, les contraintes de plage horaire et lastDayOfMonth() ne sont pas disponibles sur cet objet-valeur.

Automatique​

Pour automatiser la génération des flux, utilisez une planification. Ajoutez pour cela l’appel du helper dans le fichier routes/console.php, qui est le chemin par défaut sauf si vous l’avez modifié :

use DragonCode\LaravelFeed\Helpers\ScheduleFeedHelper;
use Illuminate\Support\Facades\Schedule;

ScheduleFeedHelper::register();

Schedule::call(function () {
// ... other action
})->everySecond();

Tous les flux actifs sont ainsi enregistrés selon la planification de la colonne expression de la base de données. Un flux ciblé planifié génère chaque valeur renvoyée par targets().

Manuelle​

Vous pouvez également définir directement la planification selon vos propres règles. Dans ce cas, seuls les flux indiqués seront exécutés.

use DragonCode\LaravelFeed\Commands\FeedGenerateCommand;
use Illuminate\Support\Facades\Schedule;

Schedule::command(FeedGenerateCommand::class, ['products'])
->withoutOverlapping()
->runInBackground()
->daily();

Schedule::command(FeedGenerateCommand::class, ['sitemap'])
->withoutOverlapping()
->runInBackground()
->hourly();

Schedule::call(function () {
// ... other action
})->everySecond();

Voir aussi​