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 :
- Créer un nouveau projet Laravel : Vous pouvez créer un nouveau projet Laravel en utilisant la commande
1laravel new nom_du_projet1laravel new nom_du_projet
ou
1composer create-project laravel/laravel nom_du_projet1composer create-project laravel/laravel nom_du_projet
- Configurer l'environnement de travail : Renommez le fichier
.env.exampleen.envà l'intérieur de votre projet racine et remplissez les informations de la base de données.
1DB_CONNECTION=mysql2DB_HOST=127.0.0.13DB_PORT=33064DB_DATABASE=brivi_db5DB_USERNAME=user_db6DB_PASSWORD=password_db1DB_CONNECTION=mysql2DB_HOST=127.0.0.13DB_PORT=33064DB_DATABASE=brivi_db5DB_USERNAME=user_db6DB_PASSWORD=password_db
- Créer un modèle : Vous pouvez créer un modèle en utilisant la commande .
1php artisan make:model Nom_model1php artisan make:model Nom_model
- 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
RepositoryResourceRepository.phpavec le code suivant :
1<?php2/**3 * Created by PhpStorm.4 * User: Grant Tiwa5 * Date: 12/11/20236 * Time: 13:237 */89namespace App\Repositories;1011abstract class ResourceRepository {1213 protected $model;1415 public function store($inputs) {16 return $this->model->create($inputs);17 }1819 public function getById($id) {20 return $this->model->where('id', $id)->first();21 }2223 public function destroy($id) {24 $this->getById($id)->delete();25 }2627}1<?php2/**3 * Created by PhpStorm.4 * User: Grant Tiwa5 * Date: 12/11/20236 * Time: 13:237 */89namespace App\Repositories;1011abstract class ResourceRepository {1213 protected $model;1415 public function store($inputs) {16 return $this->model->create($inputs);17 }1819 public function getById($id) {20 return $this->model->where('id', $id)->first();21 }2223 public function destroy($id) {24 $this->getById($id)->delete();25 }2627}
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<?php2/**3 * Created by PhpStorm.4 * User: Grant Tiwa5 * Date: 12/11/20236 * Time: 13:457 */89namespace App\Repositories;1011use App\User;12use Illuminate\Support\Collection;131415class UserRepository extends ResourceRepository {1617 public function __construct(User $user) {18 $this->model = $user;19 }2021 public function AddOneInId($id){22 return $id + 1;23 }2425 /*26 Autres fonctions qui vous seront utiles27 */28}1<?php2/**3 * Created by PhpStorm.4 * User: Grant Tiwa5 * Date: 12/11/20236 * Time: 13:457 */89namespace App\Repositories;1011use App\User;12use Illuminate\Support\Collection;131415class UserRepository extends ResourceRepository {1617 public function __construct(User $user) {18 $this->model = $user;19 }2021 public function AddOneInId($id){22 return $id + 1;23 }2425 /*26 Autres fonctions qui vous seront utiles27 */28}
- Utiliser le Repository : Injectez le Repository dans vos contrôleurs et utilisez-le pour accéder aux données.
1<?php23namespace App\Http\Controllers\Example;45use Illuminate\Http\Request;6use App\Http\Controllers\Controller;7use App\Repositories\UserRepository;8use App\Repositories\ExampleRepository;91011class ExampleController extends Controller12{13 private $exampleRepository;14 private $userRepository;1516 public function __construct(UserRepository $userRepository, ExampleRepository $exampleRepository)17 {1819 $this->$exampleRepository = $exampleRepository;20 $this->$userRepository = $userRepository;21 }2223 public function show($id) {24 $example = $this->ExampleRepository->getById($id);2526 $user = $this->userRepository->getById($example->id);2728 return view('example.index', compact('example', 'user'));29 }30}1<?php23namespace App\Http\Controllers\Example;45use Illuminate\Http\Request;6use App\Http\Controllers\Controller;7use App\Repositories\UserRepository;8use App\Repositories\ExampleRepository;91011class ExampleController extends Controller12{13 private $exampleRepository;14 private $userRepository;1516 public function __construct(UserRepository $userRepository, ExampleRepository $exampleRepository)17 {1819 $this->$exampleRepository = $exampleRepository;20 $this->$userRepository = $userRepository;21 }2223 public function show($id) {24 $example = $this->ExampleRepository->getById($id);2526 $user = $this->userRepository->getById($example->id);2728 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 serve1php 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.