ایجاد یک برنامه Crud Laravel با الگوی مخزن

Laravel یک چارچوب قدرتمند PHP است که توسعه برنامه وب را ساده می کند. هنگام ساختن یک برنامه CRUD (ایجاد ، خواندن ، به روزرسانی ، حذف) ، با استفاده از الگوی مخزن می تواند کد شما را تمیز تر ، قابل حفظ تر و آزمایش آسان تر کند. در این وبلاگ ، ما شما را از طریق راه اندازی یک پروژه Laravel با الگوی مخزن برای یک عملیات CRUD راهنمایی خواهیم کرد.
laravel-crud-repository/
│── app/
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── ProductController.php
│ ├── Models/
│ │ ├── Product.php
│ ├── Providers/
│ │ ├── RepositoryServiceProvider.php
│ ├── Repositories/
│ │ ├── Interfaces/
│ │ │ ├── ProductRepositoryInterface.php
│ │ ├── Eloquent/
│ │ │ ├── ProductRepository.php
│── database/
│ ├── migrations/
│ │ ├── xxxx_xx_xx_create_products_table.php
│── routes/
│ ├── api.php
│── .env
│── composer.json
│── artisan
اگر هنوز لاراول را نصب نکرده اید ، دستور زیر را برای ایجاد یک پروژه جدید Laravel اجرا کنید:
composer create-project laravel/laravel laravel-crud-repository
cd laravel-crud-repository
خود را به روز کنید .env
پرونده با اعتبار پایگاه داده خود:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=crud_repository
DB_USERNAME=root
DB_PASSWORD=
برای تنظیم پایگاه داده ، مهاجرت را اجرا کنید:
php artisan migrate
مانند محصول ، یک مدل با مهاجرت برای یک موجودیت نمونه تولید کنید:
php artisan make:model Product -m
پرونده مهاجرت را در database/migrations/xxxx_xx_xx_xxxxxx_create_products_table.php
:
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description')->nullable();
$table->decimal('price', 8, 2);
$table->timestamps();
});
}
مهاجرت را اجرا کنید:
php artisan migrate
1. رابط را در پوشه رابط ایجاد کنید
یک پوشه جدید ایجاد کنید app/Repositories/Interfaces/
و سپس ProductRepositoryInterface.php
پرونده:
namespace App\Repositories\Interfaces;
interface ProductRepositoryInterface
{
public function getAll();
public function getById($id);
public function create(array $data);
public function update($id, array $data);
public function delete($id);
}
ایجاد Eloquent
پوشه داخل Repositories/
و ایجاد ProductRepository.php
:
namespace App\Repositories\Eloquent;
use App\Models\Product;
use App\Repositories\Interfaces\ProductRepositoryInterface;
class ProductRepository implements ProductRepositoryInterface
{
public function getAll()
{
return Product::all();
}
public function getById($id)
{
return Product::findOrFail($id);
}
public function create(array $data)
{
return Product::create($data);
}
public function update($id, array $data)
{
$product = Product::findOrFail($id);
$product->update($data);
return $product;
}
public function delete($id)
{
return Product::destroy($id);
}
}
اجرا:
php artisan make:provider RepositoryServiceProvider
تغییر دادن app/Providers/RepositoryServiceProvider.php
:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Repositories\Interfaces\ProductRepositoryInterface;
use App\Repositories\Eloquent\ProductRepository;
class RepositoryServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(ProductRepositoryInterface::class, ProductRepository::class);
}
}
ارائه دهنده را در ثبت نام کنید config/app.php
:
App\Providers\RepositoryServiceProvider::class,
مرحله 5: یک کنترلر ایجاد کنید و مخزن را تزریق کنید
تغییر دادن app/Http/Controllers/ProductController.php
:
namespace App\Http\Controllers;
use App\Repositories\Interfaces\ProductRepositoryInterface;
use Illuminate\Http\Request;
class ProductController extends Controller
{
protected $productRepository;
public function __construct(ProductRepositoryInterface $productRepository)
{
$this->productRepository = $productRepository;
}
public function index()
{
return response()->json($this->productRepository->getAll());
}
public function store(Request $request)
{
$data = $request->validate([
'name' => 'required|string|max:255',
'description' => 'nullable|string',
'price' => 'required|numeric',
]);
return response()->json($this->productRepository->create($data));
}
public function show($id)
{
return response()->json($this->productRepository->getById($id));
}
public function update(Request $request, $id)
{
$data = $request->validate([
'name' => 'sometimes|string|max:255',
'description' => 'nullable|string',
'price' => 'sometimes|numeric',
]);
return response()->json($this->productRepository->update($id, $data));
}
public function destroy($id)
{
return response()->json(['deleted' => $this->productRepository->delete($id)]);
}
}
مرحله ششم: مسیرهای API را تعریف کنید
تغییر دادن routes/api.php
:
use App\Http\Controllers\ProductController;
Route::apiResource('products', ProductController::class);
مرحله 7: API را آزمایش کنید
سرور توسعه Laravel را اجرا کنید:
php artisan serve
آزمون با استفاده از پستچی یا فر:
همه محصولات را دریافت کنید:
curl -X GET http://127.0.0.1:8000/api/products
یک محصول ایجاد کنید:
curl -X POST -H "Content-Type: application/json" \
-d '{"name": "Laptop", "description": "A gaming laptop", "price": 1500}' \
http://127.0.0.1:8000/api/products
با سازماندهی مخازن به صورت جداگانه Interfaces
وت Eloquent
پوشه ها ، این رویکرد باعث می شود پروژه لاراول شما مقیاس پذیر و ساختار یافته تر شود. این الگوی مخزن ، اتصال سست را تضمین می کند و باعث می شود در آینده به یک منبع داده دیگر تغییر دهید.
اکنون شما یک پروژه Laravel را به دنبال الگوی مخزن برای عملیات CRUD دارید! 🚀 اگر سوالی دارید به من اطلاع دهید!
سبد خرید من را در اینجا بررسی کنید
جتون سوترادا