مارک پلاس

تکنولوژی نوین اینترنتی

Transformers مدیریت داده‌های API

دسته‌بندی‌ها

Transformers مدیریت داده‌های API
Transformers مدیریت داده‌های API

در لاراول، وقتی با API کار می‌کنی، بهتره داده‌هایی که به کلاینت (مثل Vue.js یا اپ موبایل) می‌فرستی رو ساختارمند و مرتب کنی. اینجاست که چیزی مثل Transformers یا در لاراول، API Resource به کمکت میاد.


✅ Transformers چیه؟

Transformer یا Resource، داده‌های خام مدل‌ها (مثل User یا Post) رو می‌گیره و به شکل قابل استفاده و قابل خواندن برای API تبدیل می‌کنه.


✅ ساده‌ترین روش: استفاده از Laravel API Resources

لاراول یه سیستم داخلی برای ترنسفورم کردن داده‌ها داره به اسم Resource Classes.

📦 ساختن Resource

bash
php artisan make:resource UserResource

فایلش توی مسیر app/Http/Resources/UserResource.php ساخته می‌شه.


🧩 نمونه کد UserResource

php
use Illuminate\Http\Resources\Json\JsonResource; class UserResource extends JsonResource { public function toArray($request) { return [ 'id' => $this->id, 'name' => $this->name, 'email' => $this->email, 'joined_at' => $this->created_at->diffForHumans(), ]; } }

✅ استفاده در کنترلر

php
use App\Http\Resources\UserResource; public function show($id) { $user = User::findOrFail($id); return new UserResource($user); }

یا برای لیست:

php
return UserResource::collection(User::all());

✅ سفارشی‌سازی پاسخ JSON

می‌تونی روابط و ساختارهای پیچیده‌تر رو هم اضافه کنی:

php
return [ 'id' => $this->id, 'name' => $this->name, 'profile' => new ProfileResource($this->whenLoaded('profile')), 'roles' => RoleResource::collection($this->whenLoaded('roles')), ];

✅ ارسال متا دیتا همراه JSON

php
return (new UserResource($user)) ->additional(['status' => 'success']);

✅ اگر بخوای دستی Transformer بسازی (الگوی کلاسیک)

تو بعضی پروژه‌ها یا لایه‌های جدا از لاراول، شاید بخوای transformer خودت رو بسازی:

php
class UserTransformer { public static function transform($user) { return [ 'id' => $user->id, 'username' => $user->name, 'email' => $user->email, ]; } }

در کنترلر:

php
return response()->json(UserTransformer::transform($user));

🟢 مقایسه Resource vs Transformer دستی

ویژگیResource (Laravel)Transformer دستی
رسمی و استاندارد
اتوماتیک و تمیز🔧
کنترل کامل روی داده
متا دیتا و روابطنیاز به پیاده‌سازی دستی
استفاده در JsonResponseعالینیاز به json_encode()

✨ جمع‌بندی

🔧 Resource / Transformer ابزاریه برای:

  • مرتب‌سازی داده‌ها برای API

  • پنهان کردن فیلدهای حساس (مثل password)

  • سفارشی‌سازی خروجی

  • ساده‌تر کردن پاسخ‌ها برای فرانت‌اند


اگه خواستی برات یه مجموعه Resource برای مدل‌هایی مثل User, Post, و Comment طراحی کنم، یا یه پاسخ API حرفه‌ای با meta و pagination بسازم، فقط بگو 📦✅

محتوای مرتبط

پست‌های مرتبط