يساعدك دليل التنفيذ الأساسي لـ Controller- Repository- Service model في Laravel على تنظيم التعليمات البرمجية المصدر الخاصة بك بطريقة تسهل إدارتها وصيانتها. فيما يلي مثال ملموس لكيفية تنفيذ هذا الهيكل:
Model
هذا هو المكان الذي تحدد فيه السمات والأساليب للتفاعل مع قاعدة البيانات. Laravel يوفر آلية Eloquent ORM للعمل مع النماذج. على سبيل المثال، لنقم بإنشاء model جدول Posts
:
// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
Repository
يعمل repository كوسيط بين Controller و Model. يحتوي على طرق لتنفيذ عمليات قاعدة البيانات من خلال ملف model. يساعد هذا على فصل منطق قاعدة البيانات عن منطق قاعدة البيانات controller ويسهل تغيير منطق قاعدة البيانات أو اختباره.
// 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
يحتوي service على منطق الأعمال ويتواصل مع Repository. سيتم Controller استدعاء الأساليب من Service للتعامل مع الطلبات وإرجاع البيانات المقابلة. ويساعد ذلك على فصل منطق الأعمال عن منطق العمل controller ويجعل الاختبار والصيانة أسهل.
// 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 هو المكان الذي تتعامل فيه مع طلبات المستخدم، وطرق الاتصال من أجل Service استرداد البيانات أو إرسالها، وإرجاع النتائج إلى المستخدم.
// 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
}
ومن خلال تطبيق هذه البنية، يمكنك إدارة أجزاء مختلفة من تطبيقك بكفاءة Laravel. بالإضافة إلى ذلك، فإن فصل منطق الأعمال ومنطق التخزين والتواصل بين الفئات يجعل قاعدة التعليمات البرمجية الخاصة بك مرنة وقابلة للصيانة وقابلة للاختبار.