Bonjour la Team ,
Ce tutoriel vous apprendra à utiliser Laravel 8 – la version la plus récente de l’un des frameworks PHP les plus courants – pour créer une application Web REST API CRUD avec une base de données MySQL , étape par étape, en commençant par la création du projet et se terminant par la mise en œuvre et le service de votre application. Cette première application prendra en charge la gestion des produits .
Prérequis :
Ce guide suppose que vous avez déjà installé Composer, Postman, PHP, MySQL et un terminal sur votre ordinateur, dans le cas inverse on vous guide pour le téléchargement de ces outils ci-dessous.
- Telecharger Postman
- Telecharger Composer
- Lien d’installation de Xampp (pour le serveur Apache et Mysql) .
Création de projet (en utilisant Composer) :
Afin de créer un projet Laravel, on utilisera la commande suivante :
composer create-project laravel/laravel laravel-crud-api
Après avoir tapé cette commande sur notre terminal, nous devons avoir des logs comme dans la capture ci-dessous :
Création et configuration de la BD :
Vous pouvez créer votre base de données selon l’outil que vous utilisez (phpmyadmin / HeidiSQL) .
Ensuite, nous ouvrons notre projet dans un éditeur de code (VS Code, Sublime Text…), ouvrir le fichier .env se trouvant [“nom_de_projet/.env”] et modifier le bloc de la base de données :
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=crudapi (Nom de la base de données)
DB_USERNAME=root (username)
DB_PASSWORD= (mot de passe)
Et voilà, nous avons bien configuré la partie base de données .
Model et Migration :
On passe maintenant à la partie model et migration. Pour créer un modèle accompagné d’une migration, on utilisera la commande :
php artisan make:model Produit –migration
et comme ça, la migration est créée dans ce chemin : “database\migrations\” et le modèle ici : “app\Models\Produit.php” .
Model :
Pour le modèle, il nous suffira d’ajouter le fillable des champs .
Fillable : Dans l’ORM éloquent, l’attribut $fillable est un tableau contenant tous les champs de la table qui peuvent être remplis dans les affectations de masse.
L’affectation en masse fait référence à l’envoi d’un tableau au modèle pour créer directement un ou plusieurs enregistrements dans la base de données.
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Produit extends Model
{
use HasFactory;
protected $fillable =['nom', 'description','prix'];
}
Migration :
Concernant les changements que nous ferons sur la migration, ce sera l’ajout des champs du modèle .
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('produits', function (Blueprint $table) {
$table->id();
$table->string('nom');
$table->string('description');
$table->decimal('prix',8 ,2);
$table->timestamps();
});
}
Pour ajouter cette table au sein de la base de données, il nous suffira de taper la commande :
php artisan migrate
et si on vérifie dans notre base de données, nous devrions avoir :
Remplissage de la base de données :
Dans cette partie, nous remplirons la base de données avec de fausses données en utilisant Faker et le système de Seeds et pour ce ,
nous créerons une nouvelle Factory par la commande :
php artisan make:factory ProduitFactory –model=Produit
on retrouvera le fichier dans le chemin “database\factories\ProduitFactory.php” et on mettra le code suivant :
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'nom' => $this->faker->name(),
'description' => $this->faker->paragraph($nbSentences = 2, $variableNbSentences = true),
'prix' => $this->faker->randomNumber(4),
];
}
Pour mieux comprendre la librairie Faker
On passe maintenant à la partie Seeder, pour créer un seeder ,il nous suffira de taper la commande :
php artisan make:seed ProduitTableSeeder
Ensuite nous ajouterons le code suivant :
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Produit::factory()->count(50)->create();
}
et finalement sur le terminal, on tape cette commande :
php artisan db:seed –class=ProduitTableSeeder
et voilà notre table est remplie avec 50 enregistrements .
Controller :
Avec les données que nous avons maintenant, nous aurons certainement besoin de créer un controlleur pour les manipuler, et pour ce, on a cette commande :
php artisan make:controller ProduitController –model=Produit
Index
Pour la partie index (récupérer tous les produits), nous aurons ce code :
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return Produit::all();
}
Store
Pour la partie store, c’est la méthode responsable de l’insertion d’un nouveau produit et pour assurer ce fonctionnement voici le code à ajouter :
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$produit = Produit::create($request->all());
return $produit;
}
Show
La méthode Show fait en sorte d’afficher un seul produit en se basant sur l’id passé à la route, et voici son code:
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$produit = Produit::findOrFail($id);
return $produit;
}
Update
La méthode update est pour la mise à jour d’un produit et se base sur l’id passé, et voici son code:
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$produit = Produit::findOrFail($id);
$produit->update($request->all());
return $produit;
}
Destroy
La méthode destroy prend en paramètre un id et fait la suppression du produit concerné, et voici son code :
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy( $id)
{
return Produit::destroy($id);
}
Routes :
Vu que dans cet exemple on travaille avec une API, donc le fichier que nous utiliserons sera “routes\api.php” et nous ajouterons ce code :
//Avoir tous les produits
Route::get('/produits',[ProduitController::class,'index']);
//Avoir un produit precis
Route::get('/produits/{id}',[ProduitController::class,'show']);
//Creer un nouvel produit
Route::post('/produits',[ProduitController::class,'store']);
// Mettre a jour un produit
Route::put('/produits/{id}',[ProduitController::class,'update']);
//Supprimer un produit
Route::delete('/produits/{id}',[ProduitController::class,'destroy']);
Et voilà toutes les routes que nous pourrions utiliser .
La partie de test avec Postman :
Dans cette partie, nous mettrons en test, les routes et les méthodes invoquées dans le controlleur .
en ouvrant postman, nous trouverons un tableau de bord pour créer une nouvelle requête, on la crée et on passe aux tests
Index avec la route ‘/produits’:
– On mettra dans la méthode GET , et en url on met : http://127.0.0.1:8000/api/produits
le résultat devrait être l’ensemble des produits dans la BD :
Show avec la route “/produits/{id}”:
- On mettra dans la méthode GET , et en url on met : http://127.0.0.1:8000/api/produits/20 ,(j’ai pris 20 comme exemple )
Store avec la route “/produits” :
- On mettra dans la méthode POST , et en url on met : http://127.0.0.1:8000/api/produits .
- Dans la partie headers , on ajoute :
et dans la partie Body , on met notre requête :
{
"nom": "Produit de test 2",
"description": "Description du produit de test 2",
"prix": "299",
}
et voici la réponse qu’on aura :
Update avec la route “/produits/{id}” :
- On utilisera la méthode put avec les mêmes headers et en url on met : http://127.0.0.1:8000/api/produits/10 (10 est un exemple).
- On met dans le body les nouvelles informations du produits et on fait un envoi , nous devrions avoir une retour pareil a ca :
Destroy avec la route “/produit/{id}” :
- On utilisera la méthode “DELETE” et on mettra en url : http://127.0.0.1:8000/api/produits/10 et lors de l’envoi ca devrait retourner 1, ensuite vous vérifiez la totalité des produits pour voir que c’est supprimé
Conclusion :
Et voila, notre tutoriel touche à sa fin, j’espère que ca tourne chez vous et à la prochaine .