بخش هفتم - Accessors و Mutators
به شما این امکان را میدهند که نحوه دسترسی به ویژگیهای مدل یا نحوه تغییر و ذخیرهسازی دادهها در مدل را سفارشیسازی کنید. شما میتوانید Accessors برای نمایش دادهها به شکلی متفاوت و Mutators برای ذخیرهسازی دادهها با فرمت موردنظر خود ایجاد کنید.
1- Accessors (دسترسیدهندهها)
برای تغییر دادههایی استفاده میشود که هنگام دسترسی به یک ویژگی مدل نمایش داده میشوند.
فرض کنید یک مدل کاربر (User) دارید و میخواهید نام کاربر همیشه با حرف اول بزرگ نمایش داده شود.
protected function name(): Attribute
{
return Attribute::make(
get: fn ($value) => ucfirst($value)
);
}
در این مثال، هر زمانی که به ویژگی name مدل User دسترسی پیدا کنید، مقدار آن با حرف اول بزرگ برگردانده میشود.
2- Mutators (تغییردهندهها)
برای تغییر و اصلاح دادهها قبل از ذخیرهسازی در دیتابیس استفاده میشوند.
فرض کنید میخواهید مطمئن شوید که هر زمان ایمیل کاربر ذخیره میشود، به حروف کوچک تبدیل شود.
protected function email(): Attribute
{
return Attribute::make(
set: fn ($value) => strtolower($value)
);
}
در این مثال، هر زمانی که ایمیلی به مدل User اختصاص داده میشود، قبل از ذخیرهسازی به حروف کوچک تبدیل خواهد شد.
3- ترکیب Accessors و Mutators
در بسیاری از موارد، شما میتوانید Accessors و Mutators را در یک متد به صورت ترکیبی استفاده کنید. یعنی یک متد هم میتواند دادهها را هنگام دسترسی تغییر دهد (Accessor) و هم هنگام ذخیرهسازی (Mutator).
فرض کنید میخواهید نام کاربر هنگام دسترسی به آن با حرف بزرگ و هنگام ذخیرهسازی با حروف کوچک مدیریت شود.
protected function name(): Attribute
{
return Attribute::make(
get: fn ($value) => ucfirst($value),
set: fn ($value) => strtolower($value)
);
}
در این مثال، نام کاربر هنگام بازیابی از دیتابیس با حرف بزرگ نمایش داده میشود، اما قبل از ذخیره به حروف کوچک تبدیل میشود.
4- استفاده از Accessors و Mutators
هنگامی که Accessors و Mutators تعریف میشوند، شما میتوانید بهطور معمول از ویژگیهای مدل استفاده کنید.
$user = new User();
$user->name = 'jane doe';
echo $user->name; // Jane doe
5- روش قدیمی (ورژن 8 به قبل)
در روش قدیمی، برای تعریف Accessors و Mutators باید از متدهای
get{AttributeName}Attribute و set{AttributeName}Attribute
استفاده میکردید.
public function getNameAttribute($value)
{
return ucfirst($value);
}
public function setEmailAttribute($value)
{
$this->attributes['email'] = strtolower($value);
}
اما در استفاده با روش جدید یکسان است.
▫️ 🟠
🔎 #laravel #لاراول #فصل_۴
💠 @AmirhDeveloper
.