Le guide d'implémentation de base pour Controller- Repository- Service model in Laravel vous aide à organiser votre code source d'une manière facile à gérer et à maintenir. Voici un exemple concret de la façon dont vous pouvez mettre en œuvre cette structure :
Model
C'est ici que vous définissez les attributs et les méthodes d'interaction avec la base de données. Laravel fournit le mécanisme Eloquent ORM pour travailler avec des modèles. Par exemple, créons un model pour la Posts
table :
// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
Repository
Le repository fait office d'intermédiaire entre le Controller et le Model. Il contient des méthodes pour effectuer des opérations de base de données via le model. Cela permet de séparer la logique de la base de données de celle-ci controller et facilite la modification ou le test de la logique de la base de données.
// app/Repositories/PostRepository.php
namespace App\Repositories;
use App\Models\Post;
class PostRepository
{
public function create($data)
{
return Post::create($data);
}
public function getAll()
{
return Post::all();
}
// Other similar methods
}
Service
Le service contient une logique métier et communique avec le Repository. Le Controller appellera les méthodes du Service pour gérer les demandes et renvoyer les données correspondantes. Cela permet de séparer la logique métier de la logique métier controller et facilite les tests et la maintenance.
// app/Services/PostService.php
namespace App\Services;
use App\Repositories\PostRepository;
class PostService
{
protected $postRepository;
public function __construct(PostRepository $postRepository)
{
$this->postRepository = $postRepository;
}
public function createPost($data)
{
return $this->postRepository->create($data);
}
public function getAllPosts()
{
return $this->postRepository->getAll();
}
// Other similar methods
}
Controller
C'est controller là que vous gérez les demandes des utilisateurs, appelez les méthodes du Service pour récupérer ou envoyer des données et renvoyez les résultats à l'utilisateur.
// app/Http/Controllers/PostController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Services\PostService;
class PostController extends Controller
{
protected $postService;
public function __construct(PostService $postService)
{
$this->postService = $postService;
}
public function create(Request $request)
{
$data = $request->only(['title', 'content']);
$post = $this->postService->createPost($data);
// Handle the response
}
public function index()
{
$posts = $this->postService->getAllPosts();
// Handle the response
}
// Other similar methods
}
En appliquant cette structure, vous pouvez gérer efficacement différentes parties de votre Laravel application. De plus, la séparation de la logique métier, de la logique de stockage et de la communication entre les classes rend votre base de code flexible, maintenable et testable.