PHP Communauté Laravel
4 min de lecture 100 vues

Automatisation des taches dans un projet Laravel

kwemy94

Grant TIWA

@kwemy94

Automatisation des taches dans un projet Laravel

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 :

  1. Mettez en place un nouveau projet laravel en utilisant la commande : laravel new_nom_projet or create-project laravel/laravel nom_projet
  2. Après installation, mettre à jour le fichier d’environnement (.env) en configurant les accès à la base de données
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_database_name
DB_USERNAME=your_user_name
DB_PASSWORD= your_pwd
  1. 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=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
mail_username=[email protected]
MAIL_PASSWORD=your_gmail_secret_for_application
MAIL_ENCRYPTION=tls
mail_from_address= [email protected]
MAIL_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() {
$message->to(['[email protected]'])
->subject('Alert de stock')
->from('[email protected]', 'Mon app');
});
}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. `

Appel de notre commande dans le noyau app/Console/kernel.php

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.

kwemy94

Grant TIWA

@kwemy94

Développeur web (Php/Laravel, React Js)

Vous aimez cet article ? Faite le savoir en partageant