3 min de lecture 71 vues

Utilisation de Repository dans un projet Laravel

kwemy94

Grant TIWA

@kwemy94

Dans un projet Laravel, le pattern Repository est souvent utilisé pour séparer le domaine (business) et la couche de persistance de données. Le Repository fournit une interface de collecte pour accéder aux données stockées dans une base de données, un système de fichiers ou un service externe. Les données sont renvoyées sous forme d'objets. Voici les étapes générales pour utiliser un Repository dans un projet Laravel :

  1. Créer un nouveau projet Laravel : Vous pouvez créer un nouveau projet Laravel en utilisant la commande
laravel new nom_du_projet

ou

composer create-project laravel/laravel nom_du_projet
  1. Configurer l'environnement de travail : Renommez le fichier .env.example en .env à l'intérieur de votre projet racine et remplissez les informations de la base de données.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=brivi_db
DB_USERNAME=user_db
DB_PASSWORD=password_db
  1. Créer un modèle : Vous pouvez créer un modèle en utilisant la commande .
php artisan make:model Nom_model
  1. Créer un Repository : Créez une classe abstraite contenant des méthodes communes qui seront utilisées par les contrôleurs ou les repository des models bien précis . Dans le dossier app, créons notre classe abstraite dans le repertoire Repository ResourceRepository.php avec le code suivant :
<?php
/**
* Created by PhpStorm.
* User: Grant Tiwa
* Date: 12/11/2023
* Time: 13:23
*/
 
namespace App\Repositories;
 
abstract class ResourceRepository {
 
protected $model;
 
public function store($inputs) {
return $this->model->create($inputs);
}
 
public function getById($id) {
return $this->model->where('id', $id)->first();
}
 
public function destroy($id) {
$this->getById($id)->delete();
}
 
}

Dans le code ci dessus, nous avons mis en place notre classe abstraite avec 3 méthodes commune, qui nous faciliteront des opérations avec la base de données:

  • store() qui nous permettra de sauvegarder les informations pris en paramètre dans la base de données ;
  • getById() qui permet de récupérer un élément dans la base de donnée à partir de son id pris en paramètre;
  • destroy() supprimera un élément en base de données à partir de son id pris en paramètre. Par la suite, nous pouvons créer un repository lié à un model particulier qui va étendre notre classe. Pour le model User, on pourra avoir:
<?php
/**
* Created by PhpStorm.
* User: Grant Tiwa
* Date: 12/11/2023
* Time: 13:45
*/
 
namespace App\Repositories;
 
use App\User;
use Illuminate\Support\Collection;
 
 
class UserRepository extends ResourceRepository {
 
public function __construct(User $user) {
$this->model = $user;
}
 
public function AddOneInId($id){
return $id + 1;
}
 
/*
Autres fonctions qui vous seront utiles
*/
}
  1. Utiliser le Repository : Injectez le Repository dans vos contrôleurs et utilisez-le pour accéder aux données.
<?php
 
namespace App\Http\Controllers\Example;
 
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Repositories\UserRepository;
use App\Repositories\ExampleRepository;
 
 
class ExampleController extends Controller
{
private $exampleRepository;
private $userRepository;
 
public function __construct(UserRepository $userRepository, ExampleRepository $exampleRepository)
{
 
$this->$exampleRepository = $exampleRepository;
$this->$userRepository = $userRepository;
}
 
public function show($id) {
$example = $this->ExampleRepository->getById($id);
 
$user = $this->userRepository->getById($example->id);
 
return view('example.index', compact('example', 'user'));
}
}

N'oubliez pas de tester votre application après chaque modification. Vous pouvez lancer votre application en utilisant la commande.

php artisan serve

Ouvrez le navigateur et allez sur http://localhost:8000 pour voir le résultat. Veuillez noter que ces étapes sont très générales et peuvent varier en fonction de vos besoins spécifiques. Pour plus de détails, je vous recommande de consulter la documentation officielle de Laravel ou des tutoriels en ligne détaillés.

kwemy94

Grant TIWA

@kwemy94

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

Vous aimez cet article ? Faite le savoir en partageant