Pagrindinis diegimo vadovas Controller- Repository- Service model padeda Laravel tvarkyti šaltinio kodą taip, kad jį būtų lengva valdyti ir prižiūrėti. Štai konkretus pavyzdys, kaip galite įgyvendinti šią struktūrą:
Model
Čia apibrėžiate sąveikos su duomenų baze atributus ir metodus. Laravel suteikia Iškalbingo ORM mechanizmą darbui su modeliais. Pavyzdžiui, sukurkime model lentelę Posts
:
// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
Repository
Veikia repository kaip tarpininkas tarp Controller ir Model. Jame yra duomenų bazės operacijų atlikimo per model. Tai padeda atskirti duomenų bazės logiką nuo duomenų bazės controller ir palengvina duomenų bazės logikos keitimą arba testavimą.
// 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
Jame service yra verslo logika ir jis palaiko ryšį su Repository. Iškvies užklausų apdorojimo ir atitinkamų duomenų grąžinimo Controller metodus. Service Tai padeda atskirti verslo logiką nuo verslo controller ir palengvina testavimą bei priežiūrą.
// 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
Čia controller tvarkote vartotojų užklausas, iškviečiate metodus, kad Service gautumėte arba siųstumėte duomenis ir grąžintumėte rezultatus vartotojui.
// 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
}
Taikydami šią struktūrą galite efektyviai valdyti įvairias Laravel programos dalis. Be to, atskirus verslo logiką, saugojimo logiką ir ryšį tarp klasių, kodų bazė tampa lanksti, prižiūrima ir išbandoma.