دانشجوی کارشناسی کامپیوتر - Blogger & developer
لاراول : 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 مثل لیست سیاه فیلد هامون هستش، با توجه به اپلیکیشن تون و ویژگی هاش میتونید از هر کدوم استفاده کنید،فقط اینو یادتون نره که فقط از یکی شون میتونید استفاده کنید، نه هر دوشون.
این مطلب صرفا ترجمه بود:
مطلبی دیگر از این انتشارات
نظرسنجی اولین دورهمی توسعه دهندگان لاراول
مطلبی دیگر از این انتشارات
مدیریت ساده خطای 404 با لاراول
مطلبی دیگر از این انتشارات
نه، واقعا چرا لاراول ؟