Download the PHP package andydefer/laravel-task without Composer
On this page you can find all versions of the php package andydefer/laravel-task. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download andydefer/laravel-task
More information about andydefer/laravel-task
Files in andydefer/laravel-task
Package laravel-task
Short Description A lightweight, file-based task system for Laravel with async execution, recurring tasks, and JSONL storage
License MIT
Informations about the package laravel-task
Laravel Task
Un système de tâches asynchrones et récurrentes pour Laravel, basé sur des fichiers JSONL.
Table des matières
- Introduction
- Installation
- Configuration
- Concepts fondamentaux
- Créer votre première tâche
- Le payload : passer des paramètres
- Types de tâches
- Période de grâce (Grace Period)
- Traitement par lots
- Traitement des erreurs et réessais
- Logging structuré
- Tests
- Architecture technique
- Référence technique détaillée
- Licence
Introduction
Le problème
Laravel propose des solutions pour les tâches asynchrones, mais chacune a ses limites :
| Solution | Problème |
|---|---|
| Queues | Nécessitent Redis/Beanstalkd/Database, configuration lourde |
| Task Scheduling | Exécution via cron, pas de gestion des échecs intégrée |
| Jobs | Lourds, difficilement testables unitairement |
La solution : Laravel Task
Laravel Task est un système de tâches asynchrones et récurrentes basé sur des fichiers JSONL (JSON Lines).
| Problème | Solution Laravel Task |
|---|---|
| Dépendance à Redis/Beanstalkd | Stockage JSONL - pas de base de données |
| Configuration complexe | Zéro configuration, prêt à l'emploi |
| Tests difficiles | Testable unitairement (pas de queue mock) |
| Pas de récurrence native | delay_seconds pour les tâches récurrentes |
| Pas de gestion des échecs | Retry automatique avec max_attempts |
| Logs non structurés | Logging via laravel-logger |
Installation
Le package s'enregistre automatiquement via Laravel.
Publication de la configuration (optionnel)
Configuration
Variables d'environnement
Concepts fondamentaux
Une tâche = un fichier JSONL
| Dossier | Format | Cycle de vie |
|---|---|---|
| pending/ | JSONL | Création → Exécution → Archivage |
| recurring/ | JSONL | Création → Exécution → Mise à jour (append) |
| completed/ | JSONL | Archive historique pour audit |
| grace_period/ | JSON | Traces des exécutions tardives |
Structure d'une tâche (TaskRecord)
Structure d'une tâche récurrente (RecurringTaskRecord)
Value Objects
Le package utilise des Value Objects pour un typage fort et sécurisé :
| Value Object | Description | Validation |
|---|---|---|
TaskIdVO |
Identifiant unique de tâche | Format UUID v4 |
TaskSignatureVO |
Signature lisible de la tâche | Minuscules avec traits d'union |
CounterVO |
Compteur (attempts, max_attempts, etc.) | Non négatif, avec incrémentation |
UnixTimestampVO |
Timestamp Unix | Comparaisons isAfter()/isBefore() |
Iso8601DateTimeVO |
Date ISO 8601 | Format Y-m-d\TH:i:sP |
TaskDirectoryVO |
Chemin de dossier | Construction sécurisée des chemins |
Créer votre première tâche
1. Créer la classe de la tâche
2. Enregistrer la tâche
Vous pouvez enregistrer une tâche depuis n'importe où (commande, contrôleur, événement). La façon la plus simple est d'utiliser le service unifié TaskService :
3. Exécuter le traitement par lots
4. Automatiser le traitement (Cron)
Ajoutez ceci à votre crontab pour exécuter toutes les minutes :
Le payload : passer des paramètres
Qu'est-ce qu'un payload ?
Le payload est une structure typée qui transporte les paramètres de la tâche. Il se compose de :
- un
type(string) : identifie le type de payload - un
data(StrictDataObject) : les données proprement dites
Accéder aux paramètres dans la tâche
Structure imbriquée (optionnel)
Le StrictDataObject peut contenir des données imbriquées :
Types de tâches
Tâche unique
S'exécute une seule fois, puis est archivée dans completed/.
Caractéristiques :
delay_seconds->value === 0end_atdans le futur (ounull)- Exécutée une fois puis archivée
Tâche récurrente
S'exécute à intervalles réguliers. Une seule instance par signature.
Caractéristiques :
delay_seconds->value > 0end_at = null- Une seule instance par signature
- Exécutée indéfiniment
- Les statistiques (
success_count,failure_count) sont conservées
Période de grâce (Grace Period)
Qu'est-ce que c'est ?
La période de grâce permet d'exécuter une tâche unique même si elle a dépassé sa date de fin (end_at), dans une limite configurable (par défaut 24 heures).
Pourquoi ?
Une tâche peut ne pas s'exécuter exactement à l'heure prévue :
- Le processeur de tâches n'a pas été appelé
- Le serveur était en maintenance
- La charge système a retardé l'exécution
Sans période de grâce, ces tâches seraient définitivement perdues.
Comportement par défaut
| Type de tâche | Période de grâce |
|---|---|
Unique (delay_seconds->value === 0) |
✅ Activée (24h) |
Récurrente (delay_seconds->value > 0) |
❌ Désactivée |
Avec enforce_exact_schedule = true |
❌ Désactivée |
Configuration
Exemple d'utilisation
Traitement par lots (Batch Processing)
Directive CLI
Options de la directive
| Option | Description | Défaut |
|---|---|---|
--limit |
Nombre maximum de tâches à traiter | Config batch.limit |
--unique-only |
Traite uniquement les tâches uniques | false |
--recurring-only |
Traite uniquement les tâches récurrentes | false |
--verbose |
Affiche les détails des erreurs | false |
Utilisation programmatique avec TaskService
Ordre de traitement
L'ordre de traitement est configurable :
Traitement des erreurs et réessais
Configuration des tentatives
Comportement en cas d'échec
Types d'erreur (ErrorType)
L'enum ErrorType catégorise les erreurs :
| Type | Description | Terminal |
|---|---|---|
INVALID_TASK_CLASS |
Classe de tâche invalide | ✅ |
TASK_VALIDATION_FAILED |
Validation échouée (état, expiration, tentatives) | ❌ |
TASK_EXECUTION_FAILED |
Erreur pendant l'exécution | ❌ |
TASK_EXPIRED |
Tâche expirée | ✅ |
MAX_ATTEMPTS_REACHED |
Nombre max de tentatives atteint | ✅ |
GRACE_PERIOD_EXPIRED |
Période de grâce expirée | ✅ |
RECURRING_NOT_READY |
Tâche récurrente pas prête | ❌ |
STORAGE_ERROR |
Erreur de stockage | ❌ |
Tâche expirée
Si end_at est dépassé et qu'il n'y a pas de période de grâce, la tâche est immédiatement archivée sans nouvelle tentative.
Logging structuré
Logs automatiques
Le package logue automatiquement via laravel-logger :
| Événement | Description |
|---|---|
task_started |
Début de l'exécution |
task_completed |
Exécution réussie |
task_failed |
Exécution échouée |
task_output |
Messages info() et error() |
batch_started |
Début du traitement par lots |
batch_completed |
Fin du traitement par lots |
task_executed_during_grace_period |
Exécution pendant période de grâce |
Logs personnalisés
Consulter les logs
Tests
Tester une tâche
Architecture technique
Vue d'ensemble
Le package est organisé autour d'une architecture orientée services avec une séparation claire des responsabilités. Le point d'entrée principal est le service unifié TaskService qui agit comme une façade (design pattern Facade) et délègue à six services spécialisés :
Le service unifié TaskService
TaskService est le point d'entrée unique recommandé pour tous les consommateurs du package. Il est conçu selon le pattern Facade et ne contient aucune logique métier - il se contente de déléguer chaque appel au service spécialisé correspondant.
Pourquoi utiliser TaskService ?
| Sans TaskService (injection multiple) | Avec TaskService (injection unique) |
Avantages :
- Une seule dépendance à injecter
- API unifiée et cohérente
- Facilité de mocking dans les tests
- Moins de couplage avec l'implémentation interne
Interfaces et inversion de dépendances
Chaque service expose une interface, permettant une inversion de dépendances complète :
Cette architecture permet de :
- Tester unitairement : chaque dépendance peut être mockée
- Remplacer une implémentation : vous pouvez étendre ou remplacer n'importe quel service
- Découpler : les services ne dépendent que d'interfaces, pas d'implémentations concrètes
Composants principaux
| Composant | Interface | Rôle |
|---|---|---|
TaskService |
TaskServiceInterface |
Façade unifiée - point d'entrée unique |
TaskRegistryService |
TaskRegistryServiceInterface |
Enregistrement et suppression des tâches |
TaskRunnerService |
TaskRunnerServiceInterface |
Exécution des tâches et retry |
TaskValidatorService |
TaskValidatorServiceInterface |
Validation (dates, statuts, grace period) |
TaskBatchService |
TaskBatchServiceInterface |
Traitement par lots (orchestration) |
TaskFinderService |
TaskFinderServiceInterface |
Recherche et interrogation |
BatchResultService |
BatchResultServiceInterface |
Construction immuable des résultats |
Référence technique détaillée
Services
| Service | Interface | Description | Documentation |
|---|---|---|---|
TaskService |
TaskServiceInterface |
Façade unifiée - point d'entrée unique | Voir référence |
TaskFinderService |
TaskFinderServiceInterface |
Recherche et interrogation des tâches | Voir référence |
TaskBatchService |
TaskBatchServiceInterface |
Orchestration du traitement par lots | Voir référence |
TaskRunnerService |
TaskRunnerServiceInterface |
Exécution des tâches et gestion des retry | Voir référence |
TaskValidatorService |
TaskValidatorServiceInterface |
Validation des tâches et période de grâce | Voir référence |
TaskRegistryService |
TaskRegistryServiceInterface |
Enregistrement des nouvelles tâches | Voir référence |
BatchResultService |
BatchResultServiceInterface |
Construction immuable des résultats | Voir référence |
Repositories
| Repository | Interface | Description | Documentation |
|---|---|---|---|
TaskRepository |
TaskRepositoryInterface |
Persistance des tâches uniques | Voir référence |
RecurringTaskRepository |
RecurringTaskRepositoryInterface |
Persistance des tâches récurrentes | Voir référence |
Directives CLI
| Directive | Description | Documentation |
|---|---|---|
ProcessTasksDirective |
Traitement par lots depuis le CLI | Voir référence |
TaskUnregisterDirective |
Suppression de tâches depuis le CLI | Voir référence |
Classes de base
| Classe | Description | Documentation |
|---|---|---|
AbstractTask |
Classe de base pour toutes les tâches | Voir référence |
Value Objects
| Value Object | Description | Validation |
|---|---|---|
TaskIdVO |
Identifiant UUID | Format UUID v4 |
TaskSignatureVO |
Signature lisible | Minuscules + traits d'union |
CounterVO |
Compteur incrémentable | Non négatif |
UnixTimestampVO |
Timestamp Unix | Comparaisons temporelles |
Iso8601DateTimeVO |
Date ISO 8601 | Format standard |
TaskDirectoryVO |
Chemin de dossier | Construction sécurisée |
TaskDateVO |
Date d'archivage | Format YYYY-MM-DD |
GracePeriodFilePathVO |
Chemin fichier grace period | Construction sécurisée |
Enums
| Enum | Description | Valeurs |
|---|---|---|
TaskStatus |
État de la tâche | PENDING, RUNNING, SUCCESS, FAILED |
TaskType |
Type de tâche | PENDING, RECURRING, COMPLETED, UNIQUE |
TaskOrder |
Ordre de traitement | OLDEST, NEWEST |
BatchMode |
Mode de batch | FULL, UNIQUE_ONLY, RECURRING_ONLY |
ErrorType |
Type d'erreur | 8 types (voir tableau plus haut) |
Licence
MIT © Andy Defer
---All versions of laravel-task with dependencies
laravel/framework Version ^12.0|^13.0|^14.0|^15.0
ramsey/uuid Version ^4.7
andydefer/laravel-logger Version ^3.7.4