Ghidul de implementare de bază pentru Controller- Repository- Service model in Laravel vă ajută să vă organizați codul sursă într-un mod ușor de gestionat și întreținut. Iată un exemplu concret despre cum puteți implementa această structură:
Model
Aici definiți atributele și metodele de interacțiune cu baza de date. Laravel oferă mecanismul Eloquent ORM pentru a lucra cu modele. De exemplu, să creăm un model pentru Posts
tabel:
// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
Repository
Acționează repository ca intermediar între Controller și Model. Conține metode pentru a efectua operațiuni de bază de date prin intermediul model. Acest lucru ajută la separarea logicii bazei de date de controller și facilitează schimbarea sau testarea logicii bazei de date.
// 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
Conține service logica de afaceri și comunică cu Repository. Va Controller apela metode de la pentru Service a gestiona cererile și a returna datele corespunzătoare. Acest lucru ajută la separarea logicii de afaceri de controller și facilitează testarea și întreținerea.
// 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
Acesta controller este locul în care gestionați solicitările utilizatorilor, apelați metode de la pentru a Service prelua sau trimite date și returnați rezultate utilizatorului.
// 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
}
Prin aplicarea acestei structuri, puteți gestiona eficient diferite părți ale Laravel aplicației dvs. În plus, separarea logicii de afaceri, a logicii de stocare și a comunicării între clase face ca baza de cod să fie flexibilă, întreținută și testabilă.