Laravel Résumé
Models Migration Relation
Introduction Installation Projet:Structure Strucutre,model,migration Migration,Models,Relation Artisan CLI
Les Relations
BelongsTo HasOne HasMany BelongsToMany HasManyThrough
Exemples des Relations
Relations:oneToMany,ManyToMany... Relations:Exemples
Exercices
Exercice 1 Exercice 2
Controllers Views Routes
Routes,Controller,Model,view
Les Routes
Définir:Routes Routes avec Paramètres Routes nommées Groupes de routes
Les Controllers
Les Controllers Les Contrôleurs de Ressources
Les Vues
Vues et Blade Templates Blade Layouts et Sections Sous-vues Composants et Slots Contrôles de flux
MVC :CRUD
CRUD: Produit CRUD: Etudiant CRUD: Car CRUD,Recherche: Book
Validation
Exemple :Projets
ORM:Eloquent
Exemple :Transport
Api:Laravel +React
Middleware

Seeders & Factories
Exemples :EFM

Authenfication
Queue,job,task
TP:Schools Management
Authenfication:React
Layouts
Exercices





Bien sûr ! Voici un tutoriel plus détaillé sur la planification des tâches (task scheduling) dans Laravel, en ajoutant plus de fonctionnalités et en incluant des graphiques et des mindmaps utilisant Mermaid.js.

Table des matières

  1. Introduction
  2. Présentation du concept de Planification des Tâches
  3. Configuration de la planification des tâches
  4. Définition des schedules
  5. Exécution d’un schedule
  6. Fonctionnalités avancées
  7. Conclusion

1. Introduction

La planification des tâches (task scheduling) dans Laravel permet de définir des tâches récurrentes que le serveur doit exécuter à des intervalles spécifiques. Ce tutoriel vous guidera à travers la mise en place et l'utilisation avancée de la planification des tâches dans une application Laravel.

Mindmap avec Mermaid.js

mindmap
    root(Tutoriel)
        Introduction
        Présentation du concept de Planification des Tâches
        Configuration de la planification des tâches
        Définition des schedules
        Exécution d’un schedule
        Fonctionnalités avancées
        Conclusion

2. Présentation du concept de Planification des Tâches

La planification des tâches permet de définir des tâches qui s'exécutent automatiquement à des intervalles réguliers, comme la génération de rapports, le nettoyage des fichiers temporaires, l'envoi de rappels, etc.

Mindmap des concepts avec Mermaid.js

mindmap
    root(Planification des Tâches)
        Concept
            Tâches récurrentes
            Automatisation des processus
            Intervalles réguliers
        Avantages
            Amélioration de la performance
            Centralisation des tâches
            Facilité de gestion
        Applications
            Envoi d'e-mails
            Nettoyage de fichiers
            Génération de rapports

Graphique des concepts avec Mermaid.js

graph TD;
    A[Concept] --> B[Tâches récurrentes];
    A --> C[Automatisation des processus];
    A --> D[Intervalles réguliers];
    E[Avantages] --> F[Amélioration de la performance];
    E --> G[Centralisation des tâches];
    E --> H[Facilité de gestion];
    I[Applications] --> J[Envoi d'e-mails];
    I --> K[Nettoyage de fichiers];
    I --> L[Génération de rapports];

3. Configuration de la planification des tâches

Avant de commencer, assurez-vous que la planification des tâches est activée dans votre application Laravel.

Configuration du Cron Job

Pour que Laravel puisse exécuter les tâches planifiées, vous devez ajouter un Cron Job sur votre serveur qui appelle la commande schedule:run de Laravel toutes les minutes.

Ajout du Cron Job

Ouvrez le fichier de crontab en éditant le crontab de l'utilisateur root ou de l'utilisateur sous lequel tourne votre application Laravel :

crontab -e

Ajoutez la ligne suivante :

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

Cette ligne indique au système d'exécuter la commande schedule:run toutes les minutes.

Configuration dans app/Console/Kernel.php

Assurez-vous que le fichier app/Console/Kernel.php est configuré pour définir vos tâches planifiées.

4. Définition des schedules

Définissez vos tâches planifiées dans la méthode schedule de la classe App\Console\Kernel.

Exemple de définition de schedules

Editez le fichier app/Console/Kernel.php :

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        // Exemple de tâche qui s'exécute toutes les minutes
        $schedule->command('emails:send')->everyMinute();

        // Exemple de tâche qui s'exécute tous les jours à minuit
        $schedule->command('backup:run')->dailyAt('00:00');

        // Exemple de tâche qui s'exécute tous les lundis à 14h
        $schedule->command('cleanup:logs')->mondays()->at('14:00');

        // Exemple de tâche qui s'exécute tous les mois le premier jour à 8h
        $schedule->command('generate:report')->monthlyOn(1, '08:00');

        // Exemple de tâche qui s'exécute tous les jours à 18h
        $schedule->exec('node /home/forge/script.js')->dailyAt('18:00');

        // Exemple de tâche qui s'exécute tous les jours à 9h avec des options
        $schedule->command('queue:work --stop-when-empty')->dailyAt('09:00');

        // Exemple de tâche qui s'exécute tous les jours à 10h avec des conditions
        $schedule->command('monitor:check')->dailyAt('10:00')->when(function () {
            return true; // Condition pour exécuter la tâche
        });

        // Exemple de tâche qui s'exécute tous les jours à 11h avec des retards
        $schedule->command('notifications:send')->dailyAt('11:00')->withoutOverlapping()->sendOutputTo(storage_path('logs/cron.log'))->emailOutputTo('admin@example.com');
    }

    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

Méthodes de planification disponibles

  • everyMinute(): Toutes les minutes
  • everyFiveMinutes(): Toutes les cinq minutes
  • everyTenMinutes(): Toutes les dix minutes
  • everyFifteenMinutes(): Toutes les quinze minutes
  • everyThirtyMinutes(): Toutes les trente minutes
  • hourly(): Toutes les heures
  • hourlyAt(17): Toutes les heures à la minute spécifiée (par exemple, 17h)
  • daily(): Quotidiennement à minuit
  • dailyAt('13:00'): Quotidiennement à l'heure spécifiée
  • twiceDaily(1, 13): Deux fois par jour à l'heure spécifiée
  • weekly(): Hebdomadairement dimanche à minuit
  • weeklyOn(1, '8:00'): Hebdomadairement le jour spécifié à l'heure spécifiée (0 = dimanche, 1 = lundi, etc.)
  • monthly(): Mensuellement le premier jour à minuit
  • monthlyOn(4, '15:00'): Mensuellement le jour spécifié à l'heure spécifiée
  • quarterly(): Trimestriellement
  • yearly(): Annuellement
  • cron('* * * * *'): Expression cron personnalisée

5. Exécution d’un schedule

Pour exécuter les tâches planifiées, assurez-vous que le Cron Job est correctement configuré et que la commande schedule:run est appelée toutes les minutes.

Vérification des tâches planifiées

Vous pouvez vérifier les tâches planifiées en utilisant la commande suivante :

php artisan schedule:list

Cette commande affiche la liste des tâches planifiées avec leurs horaires et leur prochaine exécution.

Exécution manuelle d’une tâche

Pour exécuter manuellement une tâche planifiée, vous pouvez utiliser la commande artisan suivante :

php artisan emails:send

6. Fonctionnalités avancées

Conditions de planification

Vous pouvez ajouter des conditions pour déterminer si une tâche doit être exécutée ou non.

$schedule->command('emails:send')->dailyAt('13:00')->when(function () {
    return true; // Condition pour exécuter la tâche
});

Exclusion de chevauchement

Pour éviter que des instances de la même tâche ne se chevauchent, utilisez la méthode withoutOverlapping().

$schedule->command('queue:work --stop-when-empty')->dailyAt('09:00')->withoutOverlapping();

Envoi de sortie vers un fichier

Vous pouvez rediriger la sortie de la tâche vers un fichier.

$schedule->command('notifications:send')->dailyAt('11:00')->sendOutputTo(storage_path('logs/cron.log'));

Envoi de sortie par e-mail

Vous pouvez envoyer la sortie de la tâche par e-mail.

$schedule->command('notifications:send')->dailyAt('11:00')->emailOutputTo('admin@example.com');

Notifications par e-mail en cas d'échec

Vous pouvez configurer des notifications par e-mail en cas d'échec d'une tâche.

$schedule->command('notifications:send')->dailyAt('11:00')->sendOutputTo(storage_path('logs/cron.log'))->emailOutputTo('admin@example.com')->onFailure(function () {
    // Actions à effectuer en cas d'échec
});

Limitation du nombre d'instances

Vous pouvez limiter le nombre d'instances d'une tâche qui peuvent s'exécuter simultanément.

$schedule->command('notifications:send')->dailyAt('11:00')->max(1);

Exécution conditionnelle basée sur la présence d'un fichier

Vous pouvez exécuter une tâche uniquement si un fichier spécifique est présent.

$schedule->command('cleanup:logs')->dailyAt('14:00')->when(function () {
    return file_exists('/path/to/file');
});

Exécution conditionnelle basée sur l'environnement

Vous pouvez exécuter une tâche uniquement dans un environnement spécifique (par exemple, production).

$schedule->command('backup:run')->dailyAt('00:00')->environments(['production']);

Exécution conditionnelle basée sur une expression booléenne

Vous pouvez exécuter une tâche uniquement si une expression booléenne est vraie.

$schedule->command('emails:send')->dailyAt('13:00')->when(function () {
    return app()->isLocal();
});

Exécution conditionnelle basée sur une date

Vous pouvez exécuter une tâche uniquement si la date actuelle correspond à une condition spécifique.

$schedule->command('generate:report')->monthlyOn(1, '08:00')->when(function () {
    return now()->dayOfWeek === Carbon::MONDAY;
});

Exécution conditionnelle basée sur une heure

Vous pouvez exécuter une tâche uniquement si l'heure actuelle correspond à une condition spécifique.

$schedule->command('cleanup:logs')->dailyAt('14:00')->when(function () {
    return now()->hour >= 14;
});

7. Conclusion

Nous avons maintenant exploré la planification des tâches dans Laravel, la configuration de la planification, la définition des schedules, l'exécution des tâches planifiées et les fonctionnalités avancées. La planification des tâches est un outil puissant pour automatiser des processus récurrents et améliorer la performance de votre application.

Mindmap finale avec Mermaid.js

mindmap
    root(Tutoriel Terminé)
        Introduction
        Présentation du concept de Planification des Tâches
        Configuration de la planification des tâches
        Définition des schedules
        Exécution d’un schedule
        Fonctionnalités avancées
        Conclusion

Graphique final avec Mermaid.js

graph TD;
    A[Introduction] --> B[Présentation du concept de Planification des Tâches];
    B --> C[Concept];
    B --> D[Avantages];
    B --> E[Applications];
    C --> F[Tâches récurrentes];
    C --> G[Automatisation des processus];
    C --> H[Intervalles réguliers];
    D --> I[Amélioration de la performance];
    D --> J[Centralisation des tâches];
    D --> K[Facilité de gestion];
    E --> L[Envoi d'e-mails];
    E --> M[Nettoyage de fichiers];
    E --> N[Génération de rapports];
    O[Configuration de la planification des tâches] --> P[Ajout du Cron Job];
    O --> Q[Configuration dans Kernel.php];
    R[Définition des schedules] --> S[Exemple de définition de schedules];
    S --> T[Méthodes de planification disponibles];
    U[Exécution d’un schedule] --> V[Vérification des tâches planifiées];
    U --> W[Exécution manuelle d’une tâche];
    X[Fonctionnalités avancées] --> Y[Conditions de planification];
    X --> Z[Exclusion de chevauchement];
    X --> AA[Envoi de sortie vers un fichier];
    X --> AB[Envoi de sortie par e-mail];
    X --> AC[Notifications par e-mail en cas d'échec];
    X --> AD[Limitation du nombre d'instances];
    X --> AE[Exécution conditionnelle basée sur la présence d'un fichier];
    X --> AF[Exécution conditionnelle basée sur l'environnement];
    X --> AG[Exécution conditionnelle basée sur une expression booléenne];
    X --> AH[Exécution conditionnelle basée sur une date];
    X --> AI[Exécution conditionnelle basée sur une heure];

J'espère que ce tutoriel vous a été utile ! N'hésitez pas à poser des questions si vous avez besoin de plus d'informations.