همانطور که می دانید در Route لاراول می توانیم علاوه بر متدهای مثل get و post از متد resource هم استفاده کنیم . این متد برای CRUD عالی است چون چهار عمل اصلی اضافه کردن، ویرایش کردن ، حذف کردن و نمایش دادن را یکجا ایجاد می کند ولی در API چطور؟ چون در API نیازی به روت های create()
و edit()
نداریم زیرا فرم یا چیزی برای نمایش وجود ندارد. بنابراین باید این دو متد را در API حذف کنیم. دو راه برای این کار وجود دارد.
راه حل اول
آیا می دانستید می توانید پارامترهایی را به Route::resource()
اضافه کنید؟ مثل این:
Route::resource('roles', 'RolesController', ['except' => ['edit', 'create']]);
در کد بالا متدهایی که نمی خواهیم استفاده کنیم مشخص کردیم.یا می توانید فقط متدهایی را مشخص کنید که می خواهید استفاده کنید مثل روش زیر:
Route::resource('roles', 'RolesController', [ 'only' => ['index', 'show', 'store', 'update', 'destroy'] ]);
روش دوم
از لاراول نسخه 5.4.24 ما یک متد جدید بنام apiResource()
داریم.
Route::apiResource('roles', 'RolesController');
این متد در واقع مثل همان روش Only که در بالا دیدید کار می کند ولی کوتاه تر و مشخص تر است.
سلام آقای علی زمانی عزیز
یه سوال خیلی حیاتی از شما داشتم و ممنون میشم اگه براتون مقدور بود و زیاد وقتتون رو نمیگیره بهش پاسخ بدین.
api resource در واقع باعث میشه که ما بتونیم یه ساختار پیچیده از دیتا رو به فرمت jason برگردونیم.(یا بفرستیم)
ما همین کار رو مگه نمیتونیم تو خوده controller و با ایجاد یک آرایه دلخواه انجام بدیم؟
اصلا مزیت استفاه از api resource در چیه؟
راستش سوال نهایی م اینه که اگه من بجای اینکه آرایه دلخواهم رو در Controller بسازم و بیام از resource استفاده کنم، ایا performance وب سرویس من پایین نمیاد؟ (چون من دارم یه آبجکت برای این کار میسازم، در حالی که میتونم داخل controller این کار رو انجام بدم)
بی نهایت از شما ممنونم
سلام . خیلی ممنونم
مزیت اصلی اش اینه که بین داده ای که از دیتابیس میاد و خروجی مون یه لایه ایجاد می کنه و عینا ساختار جدول پایگاه داده رو به خروجی نمی فرسته و می تونیم بگیم فلان فیلد رو در خروجی نشون بده یا نده و حتی اسم و مقدار یه فیلد رو هم عوض کنیم. اینطوری اگه بعدا ساختار جدول عوض شد لازم نیست به همه استفاده کنندگان از api بگیم کدهاشونو تغییر بدن. وقتی این کار رو با استفاده از resource انجام میدید مزیت اش به نظرم اینه که می تونید اون رو چندین جا استفاده کنید ولی اگر تو کنترلر باشه مجبورین کپی کنین چندین بار. از نظر معماری نرم افزار هم فکر می کنم این روش شما زیاد توصیه نمیشه
سلام
من موقع نصب پکیج در لاراول وقتی دستور composer update رو میزنم به ارور زیر برمی خورم-با اینکه من memory limit رو در php.ini به 128m افزایش دادم ولی بازم این مشکل رفع نشد.
اگه اطلاع دارید ممنون میشم راهنماییم کنید خیلی سرش گیرم
VirtualAlloc() failed: [0x00000008] Not enough storage is available to process t
his command.
VirtualAlloc() failed: [0x00000008] Not enough storage is available to process t
his command.
PHP Fatal error: Out of memory (allocated 201326592) (tried to allocate 3348232
bytes) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Ca
che.php on line 91
Fatal error: Out of memory (allocated 201326592) (tried to allocate 3348232 byte
s) in phar://C:/ProgramData/ComposerSetup/bin/composer.phar/src/Composer/Cache.p
hp on line 91
سلام . فکر کنم فضای رم یا هارد کامپیوتر شما کمه و نمی تونه پکیج رو دانلود کنه