ویرگول
ورودثبت نام
modos coding
modos codingدانشجوی کارشناسی کامپیوتر - Blogger & developer
modos coding
modos coding
خواندن ۳ دقیقه·۶ سال پیش

لاراول : Mass Assignment

لاراول
لاراول


وقتی میخوایم آرایه ای از داده ها رو به صورت یکجا به یک مدل بفرستیم، به این عمل mass assignment میگن. معمولا لازم نیس اطلاعات رو یکی یکی ذخیره کنیم و میتونیم توی یه پروسه این کار رو انجام بدیم.

این mass assignment خوبه ولی یه سری مشکلاتی امنیتی همراهش هست.اگه یکی بخواد مقادیری رو به مدل پاس بده، بدون protection خاصی راحت میتونه همه ی فیلد های دیتابیس مثل id رو تغییر بده که این خوب نیست.

مثلا یه جدول به نام students در دیتابیس داریم،فیلد های این جدول student_type و first_name و last_name و dob و gender هست.حالا فرض کنید بخواهیم از فیلد student_type محافظت کنیم تا موقع mass assignment از مقدار دهی مستقیم این فیلد جلوگیری کنیم، خب اینجاست که fillable و guarded به کمک مون میان.

کاربرد fillabe

بهتون اجازه میده توی مدل تون مقادیری که میخواین از طریق mass assignment در دسترس باشن رو مشخص کنید، برای مثال بالا به این شکل هست که باید از متغیر مخصوص fillable$ استفاده کنید:

class Student extends Model { protected $fillable = [‘first_name’, ‘last_name’, ‘email’]; //← only the field names inside the array can be mass-assign }

کد بالا یعنی ما فقط فیلد های first_name و last_name و email رو با هم مقدار دهی کنیم و فیلد های id و student_type رو نمیتونن با این فیلد ها مقدار دهی بشن.

کاربرد guarded

برعکس fillable ه، یعنی مقادیری که بهش میدین، فیلد هایی هستن که نمیخواین mass assign کنید، به کد زیر توجه کنید:

class Student extends Model { protected $guarded = [‘id’, ‘student_type’]; //← the field name inside the array is not mass-assignable }

اینجا میگیم که فیلد های id و student_type در دسترس نباشند و بقیه ی فیلد هایی که وارد نکردیم میتونن توی mass assignment استفاده بشن.

اگه میخواین که همه ی فیلد ها رو از دسترس خارج کنین از تکه کد زیر استفاده کنید:

protected $guarded = [‘*’];

اگه میخواین همه ی فیلد ها در دسترس باشن هم از تکه کد زیر استفاده کنید:

protected $guarded = [ ];

چه زمانی از fillable و guarded استفاده کنیم؟

خب این بیشتر بر میگرده به خودتون ولی اگه فیلد های دیتابیس تون زیاده و فقط میخواین چنتا فیلد رو جدا کنین استفاده از guarded راحت تره، از اون طرف هم اگه فقط میخواین دو سه تا فیلد رو mass کنید استفاده از fillable معقول تره.

حرف آخر

متغیر fillable یجورایی به اصلاح لیست سفید و متغیر guraded مثل لیست سیاه فیلد هامون هستش، با توجه به اپلیکیشن تون و ویژگی هاش میتونید از هر کدوم استفاده کنید،فقط اینو یادتون نره که فقط از یکی شون میتونید استفاده کنید، نه هر دوشون.

این مطلب صرفا ترجمه بود:

https://medium.com/@kshitij206/laravel-mass-assignment-guarded-or-fillable-7c3a64b49ca6



لاراولبرنامه نویسیوب
۴
۰
modos coding
modos coding
دانشجوی کارشناسی کامپیوتر - Blogger & developer
جامعه توسعه دهندگان لاراول
جامعه توسعه دهندگان لاراول
جامعه توسعه دهندگان لاراول در ایران، ما در اینجا سعی میکنیم توسعه دهندگان لاراول رو در کنار هم جمع کنیم و دانش مان را در اختیار هم دیگر قرار دهیم، تا بتوانیم دنیای بهتری رو بسازیم
شاید از این پست‌ها خوشتان بیاید