کنترلر نسخه ۳ (V3)
کنترلرهای نسخه ۳ در این پروژه برای ارائه یک API استاندارد و RESTful طراحی شدهاند. این کنترلرها از یک ساختار مبتنی بر ارثبری استفاده میکنند که بسیاری از عملکردهای رایج را در کلاسهای پایه کپسوله میکند و به شما اجازه میدهد تا فقط منطق خاص ماژول خود را پیادهسازی کنید.
۱. ساختار اصلی
یک کنترلر نسخه ۳ به طور خودکار با استفاده از دستور make:v3 {model} ساخته میشود و ساختار زیر را دارد:
- ارثبری: هر کنترلر از
BaseClientAPIControllerیاBaseAdminAPIControllerارثبری میکند. هر دوی این کلاسها نیز ازBaseAPIControllerارثبری میکنند که منطق اصلی در آن قرار دارد. - تزریق وابستگی (Dependency Injection): در
__construct، ریپازیتوری و ترنسفورمر مربوط به مدل به صورت خودکار تزریق میشوند. این کار باعث جداسازی کامل لایههای داده، منطق و نمایش میشود.
<?php
namespace Modules\YourModule\Http\Controllers\API\V3\Admin;
use App\Http\Controllers\BaseAdminAPIController;
use Modules\YourModule\Repositories\YourModelRepository;
use Modules\YourModule\Http\Transformers\V3\Admin\YourModelTransformer;
use Modules\YourModule\Http\Requests\V3\Admin\YourModelStoreRequest;
use Modules\YourModule\Http\Requests\V3\Admin\YourModelUpdateRequest;
use Illuminate\Http\JsonResponse;
class YourModelController extends BaseAdminAPIController
{
public function __construct()
{
// تزریق خودکار ریپازیتوری و ترنسفورمر
parent::__construct(
resolve(YourModelRepository::class),
resolve(YourModelTransformer::class)
);
}
// ... متدهای پیادهسازی شده ...
}
۲. متدهای پیادهسازی شده در کنترلر شما
این متدها به صورت پیشفرض در کنترلر تولید شده شما وجود دارند و عملیات اصلی CRUD را انجام میدهند.
-
store(YourModelStoreRequest $request): JsonResponse- وظیفه: ایجاد یک رکورد جدید.
- فرآیند: دادههای اعتبارسنجی شده از
YourModelStoreRequestرا دریافت کرده، از طریق ریپازیتوری یک مدل جدید ایجاد میکند و نتیجه را با استفاده از ترنسفورمر به صورت JSON باز میگرداند.
-
update(int $id, YourModelUpdateRequest $request): JsonResponse- وظیفه: بروزرسانی یک رکورد موجود.
- فرآیند: دادههای اعتبارسنجی شده از
YourModelUpdateRequestرا دریافت کرده، رکورد باidمشخص شده را آپدیت میکند و نتیجه را باز میگرداند.
-
delete(int $id): JsonResponse- وظیفه: حذف یک رکورد.
- فرآیند: رکورد با
idمشخص شده را از طریق ریپازیتوری حذف کرده و یک پاسخ موفقیتآمیز باز میگرداند.
۳. متدهای ارثبری شده از BaseAPIController
این متدها در تمام کنترلرهای نسخه ۳ در دسترس هستند و نیازی به پیادهسازی مجدد آنها نیست، مگر اینکه بخواهید رفتار پیشفرض را تغییر دهید.
-
index(Request $request): JsonResponse- وظیفه: دریافت لیست رکوردها به صورت صفحهبندی شده (Pagination).
- قابلیتها: به طور خودکار از
RequestCriteriaبرای فیلتر کردن، مرتبسازی و بارگذاری روابط (includes) بر اساس پارامترهای Query String پشتیبانی میکند.
-
simpleIndex(Request $request): JsonResponse- وظیفه: مشابه
indexاست اما ازsimplePaginateبرای صفحهبندی سادهتر (فقط لینکهای next/previous) استفاده میکند.
- وظیفه: مشابه
-
show(int|string $identifier, Request $request, ?string $field = 'id'): JsonResponse- وظیفه: دریافت اطلاعات یک رکورد خاص.
- قابلیتها: میتواند رکورد را بر اساس
idیا هر فیلد یکتای دیگری پیدا کند. همچنین از بارگذاری روابط (includes) پشتیبانی میکند.
-
keyValList(string $field, Request $request, string $key = 'id'): JsonResponse- وظیفه: دریافت یک لیست از رکوردها به صورت زوجهای کلید-مقدار (key-value). مناسب برای پر کردن لیستهای dropdown در فرانتاند.
- مثال:
api/v3/admin/users/key-val-list/nameلیستی از کاربران را به صورت[{ "id": 1, "name": "User A" }]باز میگرداند.
-
signal(int|BaseModel $model, BaseSignalRequest $request): JsonResponse- وظیفه: برای عملیاتهای سیگنالمانند مانند toggle کردن یک وضعیت (مثلاً لایک/آنلایک).
- فرآیند: یک
typeوvalueازBaseSignalRequestدریافت کرده و عملیات مربوطه را روی مدل انجام میدهد.
-
countsBy(string $column, Request $request): JsonResponse- وظیفه: شمارش و گروهبندی رکوردها بر اساس یک ستون خاص.
- مثال:
api/v3/admin/posts/counts-by/statusتعداد پستها را به تفکیک وضعیت (مثلاً منتشر شده، پیشنویس) باز میگرداند.
۴. متدهای خاص BaseAdminAPIController
prepareForm(): JsonResponse- وظیفه: یک ساختار خالی از مدل به همراه مقادیر پیشفرض را برای استفاده در فرمهای "ایجاد" در پنل ادمین باز میگرداند.