Osnovni vodnik za implementacijo za Controller- Repository- vam Service model pomaga Laravel organizirati izvorno kodo na način, ki ga je enostavno upravljati in vzdrževati. Tukaj je konkreten primer, kako lahko implementirate to strukturo:
Model
Tukaj definirate atribute in metode za interakcijo z bazo podatkov. Laravel zagotavlja mehanizem Eloquent ORM za delo z modeli. Na primer, ustvarimo model za Posts
tabelo:
// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
Repository
Deluje repository kot posrednik med Controller in Model. Vsebuje metode za izvajanje operacij baze podatkov prek model. To pomaga ločiti logiko baze podatkov od in controller olajša spreminjanje ali preizkušanje logike baze podatkov.
// 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
Vsebuje service poslovno logiko in komunicira z Repository. Klicala Controller bo metode iz za Service obdelavo zahtev in vrnitev ustreznih podatkov. To pomaga ločiti poslovno logiko od controller in olajša testiranje in vzdrževanje.
// 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
Tukaj controller obravnavate zahteve uporabnikov, kličete metode iz za Service pridobitev ali pošiljanje podatkov in vrnete rezultate uporabniku.
// 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
}
Z uporabo te strukture lahko učinkovito upravljate različne dele svoje Laravel aplikacije. Poleg tega ločevanje poslovne logike, logike shranjevanja in komunikacije med razredi naredi vašo kodno zbirko prilagodljivo, vzdržljivo in preizkuljivo.