Laravel 12.40 : Pause des queues et nouveaux helpers temporels
Laravel 12.40 introduit une série de fonctionnalités qui simplifient la manipulation du temps et améliorent la gestion des tâches planifiées. Cette version apporte notamment des helpers temporels élégants, la possibilité de planifier des tâches sur des jours précis du mois, et un contrôle granulaire des queues. Ces améliorations répondent à des besoins récurrents des développeurs pour écrire un code plus lisible et expressif.
Pause et reprise des queues
Laravel 12.40 permet désormais de mettre en pause et reprendre des queues spécifiques sans arrêter tous les workers. Cette fonctionnalité offre un contrôle granulaire lors de maintenances ou de déploiements.
// Mettre en pause une queue spécifique
php artisan queue:pause database:default
// Reprendre l'exécution
php artisan queue:continue database:default
// Mettre en pause une queue Redis nommée
php artisan queue:pause redis:emails
Le format est connection:queue_name, permettant de cibler précisément la queue concernée sans impacter les autres.
Les helpers temporels : une syntaxe intuitive
La nouveauté phare de Laravel 12.40 réside dans l’ajout de fonctions helpers pour manipuler le temps de manière plus naturelle. Taylor Otwell a enrichi le namespace Illuminate\Support avec des fonctions dédiées qui retournent des instances CarbonInterval.
Fonctions helpers disponibles
Voici les nouvelles fonctions qui simplifient la manipulation du temps :
use function Illuminate\Support\{seconds, minutes, hours, days, weeks, years};
// Retourne une instance CarbonInterval
seconds(30); // 30 secondes
minutes(15); // 15 minutes
hours(2); // 2 heures
days(7); // 7 jours
weeks(3); // 3 semaines
years(1); // 1 an
Ces fonctions rendent le code beaucoup plus expressif qu’auparavant, notamment lors de la définition d’expiration de cache ou de délais.
Nouvelles méthodes sur Carbon
Laravel 12.40 ajoute également deux méthodes sur la classe Carbon pour manipuler les dates avec une syntaxe fluide :
use Illuminate\Support\Carbon;
// Ajouter du temps de manière flexible
$futureDate = Carbon::now()->plus(years: 1, days: 5);
// Équivalent à : Carbon::now()->addYear()->addDays(5)
// Soustraire du temps
$pastDate = Carbon::now()->minus(weeks: 4, hours: 2);
// Équivalent à : Carbon::now()->subWeeks(4)->subHours(2)
La méthode plus() accepte les paramètres nommés suivants : years, months, weeks, days, hours, minutes, seconds, et microseconds. La méthode minus() fonctionne de manière identique pour soustraire du temps.
Cas d’usage pratiques
Ces helpers brillent particulièrement dans des contextes réels où la lisibilité du code est primordiale.
Gestion du cache
use function Illuminate\Support\minutes;
use Illuminate\Support\Facades\Cache;
// Stockage avec expiration claire et lisible
Cache::put('user_preferences', $preferences, minutes(30));
Cache::remember('api_token', hours(2), function () {
return generateApiToken();
});
Plus besoin de calculer mentalement que 120 représente 2 heures en minutes. Le code s’auto-documente.
Invitations et dates d’expiration
use Illuminate\Support\Carbon;
// Création d'une invitation valide 7 jours
Invitation::create([
'email' => 'user@example.com',
'expires_at' => Carbon::now()->plus(weeks: 1),
]);
// Token de réinitialisation de mot de passe valide 1 heure
PasswordReset::create([
'token' => Str::random(60),
'expires_at' => now()->plus(hours: 1),
]);
Notifications différées
use function Illuminate\Support\days;
// Envoyer un rappel 3 jours après l'inscription
$user->notify(
(new WelcomeNotification())->delay(days(3))
);
Planification sur des jours spécifiques du mois
La version 12.40 introduit la méthode daysOfMonth() pour planifier des tâches sur plusieurs jours précis du mois. Cette fonctionnalité, contributée par Yousef Kadah, simplifie considérablement la configuration de tâches récurrentes.
use Illuminate\Support\Facades\Schedule;
// Générer des rapports le 1er, 10e et 20e jour de chaque mois
$schedule->command('reports:generate')
->daysOfMonth(1, 10, 20)
->at('09:00');
// Syntaxe alternative avec un tableau
$schedule->command('invoices:send')
->daysOfMonth([1, 15])
->timezone('Europe/Paris');
Avant Laravel 12.40, il fallait utiliser des expressions cron complexes ou créer plusieurs entrées de planification pour obtenir ce résultat.
Validation de l’encodage des fichiers
Jamie York a contribué une nouvelle règle de validation encoding qui vérifie l’encodage des fichiers uploadés. Ceci est particulièrement utile pour les imports CSV où l’encodage peut poser problème.
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rules\File;
// Valider qu'un fichier CSV est encodé en UTF-8
Validator::validate($request->all(), [
'import_file' => [
'required',
File::types(['csv'])->encoding('utf-8'),
],
]);
// Vérifier l'encodage ISO-8859-1
Validator::validate($input, [
'legacy_data' => [
'required',
File::types(['txt', 'csv'])->encoding('iso-8859-1'),
],
]);
Cette règle évite les erreurs d’import liées à des problèmes d’encodage qui peuvent corrompre les données.
Points d’attention
- Les helpers temporels nécessitent Laravel 12.40 minimum et PHP 8.3+
- Les fonctions
seconds(),minutes(), etc. doivent être importées explicitement avecuse function - La méthode
daysOfMonth()accepte des valeurs entre 1 et 31 - Les commandes
queue:pauseetqueue:continuenécessitent le formatconnection:queue_name - La règle
encodingfonctionne uniquement avec les fichiers uploadés, pas avec les chaînes de caractères
Conclusion
Laravel 12.40 consolide la position du framework en matière de developer experience. Les helpers temporels éliminent l’ambiguïté des valeurs numériques, la planification par jours du mois simplifie les tâches récurrentes, et le contrôle granulaire des queues offre plus de flexibilité en production. Ces améliorations, bien que subtiles, contribuent à rendre le code Laravel plus expressif et maintenable.
Ressources
À propos de Laravel Actu
Développeur passionné par Laravel et son écosystème.
Voir tous les articles