مارک پلاس

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

Mutators و Accessors در مدل‌ها

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

Mutators و Accessors در مدل‌ها
Mutators و Accessors در مدل‌ها

در لاراول، Mutators و Accessors ابزارهای قدرتمندی هستند که به شما اجازه می‌دهند تا قبل از ذخیره یا پس از دریافت داده‌ها از پایگاه داده، به راحتی داده‌ها را دستکاری کنید. این‌ها در واقع متدهایی هستند که به شما این امکان رو می‌دهند که رفتار فیلدهای مدل‌ها رو تغییر بدید.


Accessors (دریافت مقادیر)

Accessors به شما این امکان رو می‌دهند که قبل از نمایش مقدار یک فیلد از مدل (وقتی داده‌ها رو از پایگاه داده دریافت می‌کنید)، مقدار اون رو تغییر بدید. مثلاً می‌تونید یک فیلد تاریخ یا یک مقدار خاص رو به فرمت دلخواه خودتون تبدیل کنید.

نحوه تعریف Accessor:

برای تعریف یک Accessor، باید یک متد در مدل خود با نام get{AttributeName}Attribute ایجاد کنید. در اینجا {AttributeName} باید به شکل camelCase نام فیلد باشد.

مثال: Accessor برای فیلد full_name

فرض کنید که در مدل User، دو فیلد first_name و last_name وجود دارد و می‌خواهید این دو فیلد را در قالب یک فیلد واحد به نام full_name نمایش دهید.

php
// مدل User class User extends Model { public function getFullNameAttribute() { return $this->first_name . ' ' . $this->last_name; } }

حالا وقتی که داده‌های کاربر رو دریافت کنید، می‌توانید به راحتی از full_name استفاده کنید:

php
$user = User::find(1); echo $user->full_name; // John Doe

Mutators (تغییر مقادیر قبل از ذخیره)

Mutators به شما این امکان رو می‌دهند که قبل از ذخیره داده‌ها در پایگاه داده، مقدار فیلد را تغییر بدید. مثلاً می‌خواهید همه‌ی مقادیر یک فیلد خاص رو قبل از ذخیره به حالت خاصی تبدیل کنید، مثل تغییر همه‌ی حروف به حروف کوچک یا رمزگذاری یک پسورد.

نحوه تعریف Mutator:

برای تعریف یک Mutator، باید یک متد در مدل خود با نام set{AttributeName}Attribute ایجاد کنید. در اینجا {AttributeName} باید به شکل camelCase نام فیلد باشد.

مثال: Mutator برای فیلد password

فرض کنید که می‌خواهید پسورد کاربر رو قبل از ذخیره در پایگاه داده، رمزنگاری کنید:

php
// مدل User class User extends Model { public function setPasswordAttribute($value) { $this->attributes['password'] = bcrypt($value); } }

حالا وقتی که پسورد رو به مدل ارسال کنید، به صورت خودکار رمزنگاری می‌شود:

php
$user = new User(); $user->name = 'John Doe'; $user->email = 'john@example.com'; $user->password = 'secret'; // به صورت خودکار رمزنگاری می‌شود $user->save();

در اینجا پسورد "secret" قبل از ذخیره شدن در پایگاه داده به صورت خودکار با استفاده از تابع bcrypt رمزنگاری خواهد شد.


Combining Mutators and Accessors

در لاراول، می‌توانید از Accessors و Mutators به طور همزمان استفاده کنید تا به راحتی داده‌ها را قبل از ذخیره یا پس از دریافت تغییر دهید.

مثال ترکیب Mutator و Accessor برای phone_number

مثلاً اگر بخواهید هنگام ذخیره کردن شماره تلفن، شماره رو به فرمت خاصی ذخیره کنید (مثلاً حذف فاصله‌ها)، و وقتی که شماره رو فراخوانی می‌کنید، به فرمت مناسب‌تری نمایش داده بشه:

php
class User extends Model { // Mutator: قبل از ذخیره شماره تلفن public function setPhoneNumberAttribute($value) { $this->attributes['phone_number'] = preg_replace('/\D/', '', $value); // حذف هر چیز غیر از اعداد } // Accessor: بعد از دریافت شماره تلفن public function getPhoneNumberAttribute($value) { return '(' . substr($value, 0, 3) . ') ' . substr($value, 3, 3) . '-' . substr($value, 6, 4); // فرمت مناسب برای نمایش } }

حالا وقتی شماره تلفن رو به مدل ارسال کنید، هر چیزی که غیر از اعداد باشه حذف می‌شود و وقتی که شماره تلفن رو دریافت کنید، به فرمت دلخواه نمایش داده می‌شود:

php
$user = new User(); $user->phone_number = '123-456 7890'; $user->save(); echo $user->phone_number; // (123) 456-7890

نکات مهم:

  1. Accessors و Mutators فقط برای دستکاری مقادیر مدل‌ها قبل از ذخیره یا پس از دریافت هستند. شما نمی‌توانید از آن‌ها برای دستکاری مقادیر فیلدهای دیگر استفاده کنید.

  2. نام‌گذاری صحیح: در نام‌گذاری Accessor و Mutator دقت کنید که از camelCase استفاده کنید و از get برای Accessor و set برای Mutator استفاده کنید.

  3. استفاده از Accessors در هنگام تغییر داده‌ها: شما می‌توانید به راحتی داده‌ها را به فرمت دلخواه تغییر دهید، بدون اینکه نیاز به تغییر داده‌ها در لایه‌های مختلف اپلیکیشن داشته باشید.


📋 جمع‌بندی:

ویژگیتوضیح
Accessorsمتدهایی که قبل از نمایش داده‌ها، مقادیر فیلدها رو تغییر می‌دهند (مثلاً تغییر فرمت تاریخ یا ترکیب فیلدها).
Mutatorsمتدهایی که قبل از ذخیره‌سازی داده‌ها در پایگاه داده، مقادیر فیلدها رو تغییر می‌دهند (مثلاً رمزنگاری پسورد).

این ویژگی‌ها به شما کمک می‌کنند که در لاراول به راحتی داده‌ها رو مدیریت کنید و از نوشتن کدهای تکراری برای تغییر مقادیر جلوگیری کنید. اگر سوالی داشتید، خوشحال می‌شم کمک کنم!

محتوای مرتبط

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