La guida all'implementazione di base per Controller- Repository- Service model in Laravel ti aiuta a organizzare il tuo codice sorgente in modo che sia facile da gestire e mantenere. Ecco un esempio concreto di come è possibile implementare questa struttura:
Model
Qui è dove definisci gli attributi e i metodi per interagire con il database. Laravel fornisce il meccanismo Eloquent ORM per lavorare con i modelli. Ad esempio, creiamo un model per la Posts
tabella:
// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
Repository
Il repository funge da intermediario tra il Controller e il Model. Contiene metodi per eseguire operazioni sul database tramite model. Ciò aiuta a separare la logica del database da controller e semplifica la modifica o il test della logica del database.
// 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
contiene la service logica aziendale e comunica con Repository. chiamerà Controller i metodi per Service gestire le richieste e restituire i dati corrispondenti. Ciò aiuta a separare la logica aziendale dall'ambiente controller e semplifica il test e la manutenzione.
// 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
È controller dove gestisci le richieste degli utenti, chiami metodi da per Service recuperare o inviare dati e restituire risultati all'utente.
// 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
}
Applicando questa struttura, puoi gestire in modo efficiente diverse parti della tua Laravel applicazione. Inoltre, la separazione della logica aziendale, della logica di archiviazione e della comunicazione tra le classi rende la base di codice flessibile, gestibile e testabile.