Laravel 12.40 : Pause des queues et nouveaux helpers temporels

L
Laravel Actu
5 min

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 avec use function
  • La méthode daysOfMonth() accepte des valeurs entre 1 et 31
  • Les commandes queue:pause et queue:continue nécessitent le format connection:queue_name
  • La règle encoding fonctionne 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
Partager :