در لاراول، Mutators و Accessors ابزارهای قدرتمندی هستند که به شما اجازه میدهند تا قبل از ذخیره یا پس از دریافت دادهها از پایگاه داده، به راحتی دادهها را دستکاری کنید. اینها در واقع متدهایی هستند که به شما این امکان رو میدهند که رفتار فیلدهای مدلها رو تغییر بدید.
Accessors (دریافت مقادیر)
Accessors به شما این امکان رو میدهند که قبل از نمایش مقدار یک فیلد از مدل (وقتی دادهها رو از پایگاه داده دریافت میکنید)، مقدار اون رو تغییر بدید. مثلاً میتونید یک فیلد تاریخ یا یک مقدار خاص رو به فرمت دلخواه خودتون تبدیل کنید.
نحوه تعریف Accessor:
برای تعریف یک Accessor، باید یک متد در مدل خود با نام get{AttributeName}Attribute ایجاد کنید. در اینجا {AttributeName} باید به شکل camelCase نام فیلد باشد.
مثال: Accessor برای فیلد full_name
فرض کنید که در مدل User، دو فیلد first_name و last_name وجود دارد و میخواهید این دو فیلد را در قالب یک فیلد واحد به نام full_name نمایش دهید.
حالا وقتی که دادههای کاربر رو دریافت کنید، میتوانید به راحتی از full_name استفاده کنید:
Mutators (تغییر مقادیر قبل از ذخیره)
Mutators به شما این امکان رو میدهند که قبل از ذخیره دادهها در پایگاه داده، مقدار فیلد را تغییر بدید. مثلاً میخواهید همهی مقادیر یک فیلد خاص رو قبل از ذخیره به حالت خاصی تبدیل کنید، مثل تغییر همهی حروف به حروف کوچک یا رمزگذاری یک پسورد.
نحوه تعریف Mutator:
برای تعریف یک Mutator، باید یک متد در مدل خود با نام set{AttributeName}Attribute ایجاد کنید. در اینجا {AttributeName} باید به شکل camelCase نام فیلد باشد.
مثال: Mutator برای فیلد password
فرض کنید که میخواهید پسورد کاربر رو قبل از ذخیره در پایگاه داده، رمزنگاری کنید:
حالا وقتی که پسورد رو به مدل ارسال کنید، به صورت خودکار رمزنگاری میشود:
در اینجا پسورد "secret" قبل از ذخیره شدن در پایگاه داده به صورت خودکار با استفاده از تابع bcrypt رمزنگاری خواهد شد.
Combining Mutators and Accessors
در لاراول، میتوانید از Accessors و Mutators به طور همزمان استفاده کنید تا به راحتی دادهها را قبل از ذخیره یا پس از دریافت تغییر دهید.
مثال ترکیب Mutator و Accessor برای phone_number
مثلاً اگر بخواهید هنگام ذخیره کردن شماره تلفن، شماره رو به فرمت خاصی ذخیره کنید (مثلاً حذف فاصلهها)، و وقتی که شماره رو فراخوانی میکنید، به فرمت مناسبتری نمایش داده بشه:
حالا وقتی شماره تلفن رو به مدل ارسال کنید، هر چیزی که غیر از اعداد باشه حذف میشود و وقتی که شماره تلفن رو دریافت کنید، به فرمت دلخواه نمایش داده میشود:
نکات مهم:
-
Accessors و Mutators فقط برای دستکاری مقادیر مدلها قبل از ذخیره یا پس از دریافت هستند. شما نمیتوانید از آنها برای دستکاری مقادیر فیلدهای دیگر استفاده کنید.
-
نامگذاری صحیح: در نامگذاری Accessor و Mutator دقت کنید که از camelCase استفاده کنید و از
getبرای Accessor وsetبرای Mutator استفاده کنید. -
استفاده از Accessors در هنگام تغییر دادهها: شما میتوانید به راحتی دادهها را به فرمت دلخواه تغییر دهید، بدون اینکه نیاز به تغییر دادهها در لایههای مختلف اپلیکیشن داشته باشید.
📋 جمعبندی:
| ویژگی | توضیح |
|---|---|
| Accessors | متدهایی که قبل از نمایش دادهها، مقادیر فیلدها رو تغییر میدهند (مثلاً تغییر فرمت تاریخ یا ترکیب فیلدها). |
| Mutators | متدهایی که قبل از ذخیرهسازی دادهها در پایگاه داده، مقادیر فیلدها رو تغییر میدهند (مثلاً رمزنگاری پسورد). |
این ویژگیها به شما کمک میکنند که در لاراول به راحتی دادهها رو مدیریت کنید و از نوشتن کدهای تکراری برای تغییر مقادیر جلوگیری کنید. اگر سوالی داشتید، خوشحال میشم کمک کنم!