1. Accueil
  2. Articles
3 min de lecture
158 vues

Utilisation de Repository dans un projet Laravel

kwemy94
Grant TIWA

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
1laravel new nom_du_projet
1laravel new nom_du_projet

ou

1composer create-project laravel/laravel nom_du_projet
1composer 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.
1DB_CONNECTION=mysql
2DB_HOST=127.0.0.1
3DB_PORT=3306
4DB_DATABASE=brivi_db
5DB_USERNAME=user_db
6DB_PASSWORD=password_db
1DB_CONNECTION=mysql
2DB_HOST=127.0.0.1
3DB_PORT=3306
4DB_DATABASE=brivi_db
5DB_USERNAME=user_db
6DB_PASSWORD=password_db
  1. Créer un modèle : Vous pouvez créer un modèle en utilisant la commande .
1php artisan make:model Nom_model
1php 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 :
1<?php
2/**
3 * Created by PhpStorm.
4 * User: Grant Tiwa
5 * Date: 12/11/2023
6 * Time: 13:23
7 */
8 
9namespace App\Repositories;
10 
11abstract class ResourceRepository {
12 
13 protected $model;
14 
15 public function store($inputs) {
16 return $this->model->create($inputs);
17 }
18 
19 public function getById($id) {
20 return $this->model->where('id', $id)->first();
21 }
22 
23 public function destroy($id) {
24 $this->getById($id)->delete();
25 }
26 
27}
1<?php
2/**
3 * Created by PhpStorm.
4 * User: Grant Tiwa
5 * Date: 12/11/2023
6 * Time: 13:23
7 */
8 
9namespace App\Repositories;
10 
11abstract class ResourceRepository {
12 
13 protected $model;
14 
15 public function store($inputs) {
16 return $this->model->create($inputs);
17 }
18 
19 public function getById($id) {
20 return $this->model->where('id', $id)->first();
21 }
22 
23 public function destroy($id) {
24 $this->getById($id)->delete();
25 }
26 
27}

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:
1<?php
2/**
3 * Created by PhpStorm.
4 * User: Grant Tiwa
5 * Date: 12/11/2023
6 * Time: 13:45
7 */
8 
9namespace App\Repositories;
10 
11use App\User;
12use Illuminate\Support\Collection;
13 
14 
15class UserRepository extends ResourceRepository {
16 
17 public function __construct(User $user) {
18 $this->model = $user;
19 }
20 
21 public function AddOneInId($id){
22 return $id + 1;
23 }
24 
25 /*
26 Autres fonctions qui vous seront utiles
27 */
28}
1<?php
2/**
3 * Created by PhpStorm.
4 * User: Grant Tiwa
5 * Date: 12/11/2023
6 * Time: 13:45
7 */
8 
9namespace App\Repositories;
10 
11use App\User;
12use Illuminate\Support\Collection;
13 
14 
15class UserRepository extends ResourceRepository {
16 
17 public function __construct(User $user) {
18 $this->model = $user;
19 }
20 
21 public function AddOneInId($id){
22 return $id + 1;
23 }
24 
25 /*
26 Autres fonctions qui vous seront utiles
27 */
28}
  1. Utiliser le Repository : Injectez le Repository dans vos contrôleurs et utilisez-le pour accéder aux données.
1<?php
2 
3namespace App\Http\Controllers\Example;
4 
5use Illuminate\Http\Request;
6use App\Http\Controllers\Controller;
7use App\Repositories\UserRepository;
8use App\Repositories\ExampleRepository;
9 
10 
11class ExampleController extends Controller
12{
13 private $exampleRepository;
14 private $userRepository;
15 
16 public function __construct(UserRepository $userRepository, ExampleRepository $exampleRepository)
17 {
18 
19 $this->$exampleRepository = $exampleRepository;
20 $this->$userRepository = $userRepository;
21 }
22 
23 public function show($id) {
24 $example = $this->ExampleRepository->getById($id);
25 
26 $user = $this->userRepository->getById($example->id);
27 
28 return view('example.index', compact('example', 'user'));
29 }
30}
1<?php
2 
3namespace App\Http\Controllers\Example;
4 
5use Illuminate\Http\Request;
6use App\Http\Controllers\Controller;
7use App\Repositories\UserRepository;
8use App\Repositories\ExampleRepository;
9 
10 
11class ExampleController extends Controller
12{
13 private $exampleRepository;
14 private $userRepository;
15 
16 public function __construct(UserRepository $userRepository, ExampleRepository $exampleRepository)
17 {
18 
19 $this->$exampleRepository = $exampleRepository;
20 $this->$userRepository = $userRepository;
21 }
22 
23 public function show($id) {
24 $example = $this->ExampleRepository->getById($id);
25 
26 $user = $this->userRepository->getById($example->id);
27 
28 return view('example.index', compact('example', 'user'));
29 }
30}

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

1php artisan serve
1php 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.