Qu'est ce que Laravel?

Laravel est un framework d'application Web créé par Taylor Otwell. Ce framework est considéré le meilleur framework web open-source codé en PHP en 2022. Celui-ci facilite la création d'applications Web modernes. Avec sa syntaxe expressive et élégante (MVC), Laravel nous permet de réduire les délais de développement et ainsi de terminer des produits plus rapidement que toute autre solution.

designer

Efficacité et simplicité

Artisan est l'interface de ligne de commande incluse avec Laravel. Artisan fournit un certain nombre de commandes utiles qui peuvent vous aider lors de la création et l'optimisation de votre application.

lol

Migration de base de données

La migration de base de données est également l'un des plus grands avantages de l'utilisation de ce framework. Ces migrations permettent aux développeurs d'annuler facilement les modifications apportées à la base de données en cas d'erreur et ainsi, d'avoir les mêmes versions de base de données.

creation

Architecture MVC

L'utilisation de l'architecture MVC améliore les performances des applications Web. L'architecture Laravel est aussi l'une des raisons pour choisir le framework.

framework

Installations requises

Pour gérer les dépendances, Laravel utilise composer. Il faut s'assurer que Composer est installé sur votre système avant d'installer Laravel. Il sera important de suivre les étapes d'installation afin de permettre le bon fonctionnement à Laragon soit bien configuré.

Ensuite, il faut installer la dernière version (Stable version) de PHP.
Ensuite, on installe MySQL Workbench pour nos bases de données ainsi que Laragon, un environnement de développement universel. Il a de nombreuses fonctionnalités pour vous rendre plus productif. Après le téléchargement, nous avons la possibilité d'ajouter Git, phpmyadmin, Node.js/MongoDB, Python/Django/Flask/Postgres, Ruby, Java, Go en utilisant "Tools > Quick add".

Installation de Laravel:

//Créer le projet
composer create-project laravel/laravel example-app

cd example-app

//Exécuter le serveur de développement
php artisan serve
La première commande permet d'installer automatiquement la dernière version de Laravel avec la commande composer.
Par la suite, on rentre dans la racine du projet.
Et enfin, on lance la commande artisan serve permettant d'exécuter le projet sur le serveur de développement.

Le squelette de Laravel est prêt. Maintenant, voyons briévement l'architecture de ce framework.
repo

Répertoire Laravel

Laravel a quelques similarités avec CakePHP mais il faut dire qu'il est beaucoup plus complet et mieux structuré.

Voici les dossiers les plus importants:

app Ce répertoire contient l'intégralité du code source de notre projet. Il y voit les fichiers de modèles, contrôleurs, événements, commandes, middleware et exceptions.

config Comme son nom l'indique clairement, celui-ci stocke tous les fichiers de configuration du projet.

database Le fichier database est la place où nous mettons tous les fichiers de migrations, model factories et seeders. Ils déterminent la structure de la base de données.

public Ce répertoire contient le fichier index.php, qui est le point d'entrée de toutes les requêtes. Ce répertoire héberge également vos actifs tels que les img, JS et CSS.

lang Le répertoire lang contient tous les fichiers de langue de l'application.

routes Le répertoire routes contient toutes les définitions de routes pour votre application. Par défaut, il y a quatres fichiers routes: web.php, api.php, console.php et channels.php.
  • web.php
    Le fichier contient des URL que le RouteServiceProvider place dans le groupe de middleware Web, qui fournit l'état de la session, la protection CSRF et le chiffrement des cookies.
  • api.php
    Il est important d'utiliser ce fichier lorsque nous offrons du API RESTful. C'est donc ce fichier où l'on enregistre toutes les routes API. Les routes sont chargées par le RouteServiceProvider qui se voit attribuer le groupe middleware nommé "api".
  • channels.php
    Ce fichier est l'endroit où l'on peut enregistrer tous les canaux de diffusion d'événements pris en charge par notre application.
resources Le répertoire des ressources contient les vues ainsi que les actifs bruts non compilés tels que du CSS ou du JS.

storage Le répertoire storage contient les logs, Blade templates compilés, sessions basées sur des fichiers, caches de fichiers et autres fichiers générés par le framework. Ce répertoire est séparé en répertoires d'application, de structure et de logs. Le dossier logs contient les fichiers journaux de votre application. Si configuré, on y trouvera les rapports d'erreurs de l'application.

Modèle - Vue - Contrôleur

Le "modèle" est une représentation d'une instance ou d'un objet réel dans notre base de code. Son rôle est d'aller récupérer les informations « brutes » dans la base de données, de les organiser et de les assembler pour qu'elles puissent ensuite être traitées par le contrôleur. On y trouve donc entre autres les requêtes SQL.
La "vue" représente l'interface à travers laquelle l'utilisateur interagit avec notre application. Elle ne fait presque aucun calcul et se contente de récupérer des variables pour savoir ce qu'elle doit afficher.
Le "contrôleur" gère l'action des utilisateurs. Cette partie gère la logique du code. C'est l'intermédiaire entre le modèle et la vue. C'est aussi celui qui s'occupe de la gestion des droits d'accès du site et autres.

browser

Commandes Artisan

Artisan est le nom de l'interface de ligne de commande incluse avec Laravel. Il fournit un certain nombre de commandes utiles pour votre utilisation lors du développement de votre application. Il est piloté par le puissant composant Symfony Console.

Afin d'en savoir plus sur l'utilité de ces commandes on écrit:

//Liste toutes les commandes artisan
php artisan list
Parmi commandes les plus importantes, nous retrouvons:
//Créer un nouveau modèle appelé Client
php artisan make:model Client

//Créer un nouveau controlleur
php artisan make:controller ClientController

//Crée un nouveau fichier de migration
php artisan make:migration create_clients_table

//Crée un seeder de base de données
php artisan make:seeder ClientsTableSeeder

/*Une fois le fichier de migration complet, nous créerons la migration avec le seeder:*/
//L'extension --seed spécifie qu'il faut aussi exécuter le seeder
php artisan migrate --seed

//Crée une commande


//Crée une notification
php artisan make:notification ErrorAccountNotification

Pour faire court, nous avons créés un client (model, controller), une migration pour stocker les clients dans notre base de données, un seeder afin de tester avec des faux clients.
De plus, nous avons créé une commande qui permet de déterminer si le client a une erreur dans son dossier et envoie une notification si c'est le cas.

On constate que cela nous a pris quelques commandes pour créer la mojorité des fichiers nécessaires pour une application complète.

library

Eloquent

Avant de penser à créer une notification, il faudrait bien savoir comment utiliser le modèle de conception Eloquent pour aller chercher rapidement nos clients dans la base de données. J'ai montré les mutiples commandes artisan ci-haut qui assurent le bon fonctionnement du modèle Eloquent.
De plus, il sera important d'utiliser PSR-4. Ce PSR décrit une spécification pour le chargement automatique des classes à partir des chemins de fichiers. Il est entièrement interopérable. Ce PSR décrit également où placer les fichiers qui seront chargés automatiquement conformément à la spécification.

Les méthodes Eloquent comme all et get récupèrent plusieurs enregistrements de la base de données. Cependant, ces méthodes ne renvoient pas un tableau PHP simple. Au lieu de cela, une instance de Illuminate\Database\Eloquent\Collection est renvoyée.
En utilisant Eloquent ORM, obtenir et trouver des enregistrements de la base de données est gérable et facile. Les requêtes sont construites simplement. Pour créer des instructions Model::where, on utilise les méthodes get()et first(). La méthode first() renverra un seul enregistrement, tandis que la méthode get() renverra une collection d'enregistrements sur lesquels on aura accès aux informations. De plus, la méthode find() peut être utilisée avec un tableau de clés primaires, qui renverra une collection d'enregistrements correspondants.

Voici quelques exemples:

//Va chercher tous les étudiants
$students = Student::all();

//Va chercher un étudiant selon son id (clé primaire dans la table)
$student = Student::find(1);

//Va chercher dans le modele Students, le premier étudiant au nom de John Doe
$JohnDoe = Student::where('name', '=', 'John Doe')->first();
Nous avons vu comment récupérer des données de la bd mais que fait-on si l'on veut les mettre à jour ou les supprimer? C'est tout aussi facile:
/*Modification*/
//On récupère l'étudiant dans la variable, on modifie son âge et on exécute la //méthode save()
$JohnDoe = Student::where('name', '=', 'John Doe')->first();
$JohnDoe->age = 19;
$JohnDoe->save();

/*Supression*/
$JohnDoe = Student::find(1);
$JohnDoe->delete();
En plus de la suppression effective des enregistrements de votre base de données, Eloquent peut également "supprimer à la source" les modèles. Lorsque les modèles sont supprimés, ils ne sont pas réellement supprimés de votre base de données. Au lieu de cela, un attribut deleted_at est défini sur le modèle et inséré dans la base de données. Si la valeur de l'attribut deleted_at d'un modèle n'est pas nulle, le modèle a été supprimé. Pour activer les suppressions progressives d'un modèle, il faudra utiliser le trait Illuminate\Database\Eloquent\SoftDeletes sur le modèle et ajouter la colonne deleted_at aux propriété $dates :
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Client extends Model
{
use SoftDeletes;

/**
* The attributes that should be mutated to dates.
*
* @var array
*/
protected $dates = ['deleted_at'];
}
notif

Notifications

Il est possible d'envoyer des emails et notifications dans la grande majorité des réseaux sociaux professionnels avec Laravel. Nous allons expérimenter l'envoi de notifications dans Microsoft Teams.
Tout d'abord, il va falloir installer le package "laravel-notification-channels/microsoft-teams" Pour cela, on exécute cette commande via composer:

composer require laravel-notification-channels/microsoft-teams
Premièrement, il faut ajouter le "service provider" dans config/app.php :
'providers' => [
//....
NotificationChannels\MicrosoftTeams\MicrosoftTeamsServiceProvider::class,
],
De plus, il faut configurer notre connceteur (webhook connector) sur notre canal Teams: webhook0 On copie le lien du connecteur webhook et le rajouterons dans le .env (notre fichier de configuration de projet local)
#TEAMS TEAMS_WEBHOOK_URL="https://cmontmorency365.webhook.office.com/webhookb2/6b..."
Par la suite, on configure MicrosoftTeams service dans notre projet. Dans config/services.php, on ajoute le webhook URL:
'microsoft_teams' => [ 'webhook_url' => env('TEAMS_WEBHOOK_URL'), ],
Vous êtes enfin prêts à utiliser ce package. On crée alors le fichier de notification et le fichier de commande à l'aide de artisan comme montré précedemment:
php artisan make:notification ErrorAccountNotification
php artisan make:command AccountCheckerCommand
Une fois les fichiers créés, dans le fichier de notification, on ajoute Teams dans la méthode via(). Cette méthode s'occupe d'envoyer la notification au service spécifié dans le tableau via().

Le fichier Notification
<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use App\Models\User;
use Illuminate\Notifications\Notification;
use NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel;
use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage;

class ErrorAccountNotification extends Notification
{
use Queueable;

protected $user;

/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}

/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return [MicrosoftTeamsChannel::class];
}

public function toMicrosoftTeams($notifiable)
{
return MicrosoftTeamsMessage::create()
->to(env('TEAMS_WEBHOOK_URL'))
->type('error')
->title('Erreur de paiement') ->content('Bonjour, ' . $this->user->name .
',<br><br>Votre paiement a été refusé. Veuillez mettre à jour votre mode de paiement.<br>')
->button('Voir votre compte', 'https://google.com');
}
}
Le fichier Command
<?php
namespace App\Console\Commands;

use App\Notifications\ErrorAccountNotification;
use Illuminate\Support\Facades\Notification;
use Illuminate\Console\Command;
use App\Models\User;

class AccountCheckerCommand extends Command
{
/**
* The name and signature of the console command.
* @var string
*/
protected $signature = 'command:acct';

/**
* The console command description.
* * @var string
*/
protected $description = 'Envoie notification au premier utilisateur de la bd (id=1)';

/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$user = User::find(1);

Notification::route(NotificationChannels\MicrosoftTeams\MicrosoftTeamsChannel::class, config('services.teams.webhook_url')) ->notify(new ErrorAccountNotification($user));
}
}

Par la suite, nous lancerons la commande du fichier ci-haut:
php artisan command:acct
Finalement, je recois instantanèment la notification dans mon canal. teamsMessage

Références