Automatisation des taches dans un projet Laravel
Grant TIWA
@kwemy94
La planification des tâches est une technique utile pour automatiser diverses tâches répétitives en fonction d'un calendrier. Ces tâches peuvent être de nature critique (comme la sauvegarde d'une base de données), ou il peut s'agir simplement d'envoyer un courriel hebdomadaire à vous-même ou à vos clients. L'exécution manuelle de ces tâches peut rapidement devenir fastidieuse. La meilleure solution consiste donc à les automatiser et à les surveiller afin qu'elles puissent s'exécuter de manière prévisible et dans les délais impartis.
Prérequis
Pour réussir à ce tutoriel, vous devez être capable de :
- Créer une application avec le Framework Laravel,
- Configurer l’envoi de mail dans une application utilisant le Framework Laravel
Pour faire simple, nous allons donc montrer comment envoyer des notifications automatiques par mail à l’admin de l’application pour informer de la pénurie des produits en stock grâce à l’utilitaire. cron pour programmer (Schedule) la tache. Pour y parvenir, suivons les étapes ci-dessous :
- Mettez en place un nouveau projet laravel en utilisant la commande :
laravel new_nom_projet
orcreate-project laravel/laravel nom_projet
- Après installation, mettre à jour le fichier d’environnement (.env) en configurant les accès à la base de données
DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=your_database_nameDB_USERNAME=your_user_nameDB_PASSWORD= your_pwd
- Toujours dans le fichier d’environnement, ajouter la configuration du serveur SMTP de Gmail. (Vous pouvez faire une petite recherche en ligne pour savoir comment faire la configuration des paramètres du compte Google afin d’avoir un mot de passe d’application lié à comptre compte Gmail).
MAIL_MAILER=smtpMAIL_PORT=587MAIL_PASSWORD=your_gmail_secret_for_applicationMAIL_ENCRYPTION=tlsMAIL_FROM_NAME="${APP_NAME}"
En supposant que votre système d’envoi de mail est opérationnel dans votre application, nous allons nous attaquer au vif du sujet. Considérons que vous avez une table produit caractérisée par : products(product_name, description, quantity_init, quantity_available).
Lorsque vous faites des opérations liées à la table produit, le champ quantity_available qui représente la quantité du produit disponible est mis à jour. Dès que la valeur de ce champ est inférieure ou égale à 5, un mail doit être envoyé chaque jour à 10h 15 min à l’administrateur (dans le but de rappeler afin qu’il approvisionne le produit en cours d’épuisement).
Nous procéderons dans ce cas en 2 étapes : Configuration d’une commande d’envoi de mail lorsque le seuil du stock est atteint et appel de la commande dans le noyau de Laravel
Configuration de la commande
Créons une commande similaire aux commandes artisan existante dans laravel en exécutant :
php artisan make:command SoldOutCommand
Cette commande se chargera de créer un fichier SoldOutCommand.php
dans le dossier app/Console/Commands
.
<?php namespace App\Console\Commands; use Illuminate\Console\Command; class SoldOutCommand extends Command{ protected $signature = 'app:product-out'; protected $description = "Command de notification de pénuirie produit dans l'app"; /** * Execute the console command. */ public function handle() { // }}
$signature
: contient le nom de la commande que nous avons crée et qui peut être exécutée sur notre terminal en saisisant php artisan app:product-out
. Cette signature peut éventuellement contenir des options, mais nous n’utiliserons pas les options dans notre cas.
$description
: permet de définir une description de notre commande (ce que fait notre commande).
Dans la méthode handle()
nous allons récupérer tous les articles de notre table products
donc la quantité disponible est inférieure à 5 et notifier l’admin de l’app.
public function handle() { try { $products = Product::where('quantity_available', '<=' , 5)->get() ; if($product){ \Mail ::send('path_fichier_blade_de_mail', compact('products'), function($message) use() { ->subject('Alert de stock') }); }else { echo "Aucun produit en alerte"; } } catch (\Throwable $th) { echo "Erreur survenue : $th"; } }
Dans le fichier path_fichier_blade_de_mail
en paramètre à la fonction send()
ci-dessus, vous pourriez détailler la liste des produits en cours de pénurie dans l’application. `
app/Console/kernel.php
Appel de notre commande dans le noyau Il suffit d’ajouter la ligne ci-dessous dans la methode schedule()
du kernel
$chedule->command(‘app:product-out’)->dailyAt(‘10:15’)->sendOutputTo(‘schedule-output.log’) ;
Cette commande permet d’exécuter notre fichier de commande (chaque jour à 10h15min) que nous avons crée précédemment.
Le mail sera envoyé à l’utilisateur ou à l’admin dont l’adresse est renseignée au cas où des produits existent et ont une quantité disponible inférieure ou égale à 5.
La sortie de l’exécution est envoyée dans le fichier shedule-output.log
.
Après avoir démarré notre serveur php artisan serve
, nous exécutons la commande ci-dessous pour avoir le rendu.
php artisan schedule:work
Vous pouvez changer la fonction dailyAt()
utilisée ci-dessus par everyMinute()
afin de voir le rendu par minute.
Au vu de tout ce qui a été fait plus haut, vous pouvez customiser afin de mieux l’adapter à vos besoins.