في هذه المقالة ، سننتقل عبر إنشاء Laravel تطبيق يستخدم Dependency Injection لإدارة التبعيات وإنشاء هيكل كود مصدر أكثر قابلية للصيانة. سننشئ مثالًا بسيطًا لإدارة قائمة المنتجات في المتجر.
الخطوة الأولى: التحضير
أولاً ، تأكد من أنك قمت Laravel بالتثبيت على جهاز الكمبيوتر الخاص بك. يمكنك استخدامه Composer لإنشاء Laravel مشروع جديد:
composer create-project --prefer-dist laravel/laravel DependencyInjectionApp
بعد إنشاء المشروع ، انتقل إلى دليل المشروع:
cd DependencyInjectionApp
الخطوة 2: إنشاء Service و Interface
لنبدأ بإنشاء service إدارة قائمة المنتجات. قم بإنشاء interface فصل وفصل ينفذان هذا interface:
قم بإنشاء الملف app/Contracts/ProductServiceInterface.php
:
<?php
namespace App\Contracts;
interface ProductServiceInterface
{
public function getAllProducts();
public function getProductById($id);
}
قم بإنشاء الملف app/Services/ProductService.php
:
<?php
namespace App\Services;
use App\Contracts\ProductServiceInterface;
class ProductService implements ProductServiceInterface
{
public function getAllProducts()
{
// Logic to get all products
}
public function getProductById($id)
{
// Logic to get product by ID
}
}
الخطوة 3: التسجيل في Service الحاوية
افتح الملف app/Providers/AppServiceProvider.php
وأضف إلى register
الوظيفة:
use App\Contracts\ProductServiceInterface;
use App\Services\ProductService;
public function register()
{
$this->app->bind(ProductServiceInterface::class, ProductService::class);
}
الخطوة 4: استخدام Dependency Injection
في وحدة التحكم ، يمكنك استخدامها Dependency Injection لحقن ProductService
:
use App\Contracts\ProductServiceInterface;
public function index(ProductServiceInterface $productService)
{
$products = $productService->getAllProducts();
return view('products.index', compact('products'));
}
خاتمة
من خلال استخدام الحاوية وداخلها Dependency Injection ، قمنا ببناء تطبيق لإدارة قائمة المنتجات. هذا الأسلوب يجعل الكود المصدري أكثر قابلية للصيانة ويقلل التبعيات بين المكونات المختلفة للتطبيق. Service Laravel
تدرب على المشروع وخصصه وفقًا لاحتياجاتك لاكتساب فهم أعمق لاستخدام Dependency Injection في Laravel.