ftp
3 سال پیش توسط ftp مطرح شد
4 پاسخ

سوال در مورد mutator

@ali.bayat
@mhyeganeh
@sina.it91

من در یک آموزشی دیدم طرف یک فانکشن به نام access در مدل userساخت و اون رو در کنترلر اینجوری فراخوانی کرد میشه توضیح بدید که mutator هست یا یک روش دیگه ای است ممنون میشم با مثال بگید

user->access

ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
2

چیزی که میگید بیشتر شبیه Accessor هست. مثلا فرض کنید برای کاربری فیلدهای firstName و lastName وجود داره ولی در قسمت های زیادی از پروژمون نیاز داریم که اسم کامل یعنی ترکیب این دو رو نمایش بدیم. بجای اینکه همیشه کد زیر رو تکرار کنیم:

{{ $user->firstName }} {{ $user->lastName }}

کافیه یک Accessor در مدل User ایجاد کنیم به این شکل:

/**
 * Get the user's full name.
 *
 * @return string
 */
public function getFullNameAttribute()
{
    return "{$this->firstName} {$this->lastName}";
}

و از این به بعد هر جایی به اسم کامل کاربر نیاز داشتیم می‌تونیم به این شکل استفاده کنیم:

{{ $user->fullName }}

اگر دقت کنید ما داریم به شکلی رفرنس می‌دهیم که انگار یک فیلد بنام fullName وجود داره. در حالی که در پشت صحنه می‌فهمه که باید بسراغ متد getFullNameAttribute مدل User بره و از خروجی این متد استفاده کنه. این است جادوی Accessor ها در لاراول! و استفاده های مختلف و نامحدودی میشه از این قضیه کرد...

Mutator ها هم برعکس Accessor ها هستند و زمانی استفاده می‌شوند که بجای get کردن قصد set کردن داشته باشیم. مثلا می‌خواهیم بصورت اتومات همه تاریخ ها قبل از ثبت در دیتابیس به میلادی تبدیل شوند یا کاراکتر‌های عربی به فارسی تغییر پیدا کنند.


ftp
تخصص : ساده
@ftp 3 سال پیش آپدیت شد
0

@mhyeganeh
نه
به این شکل هم صدا کرده بود


$user->access  

```و در مدل هم به این شکل تعریف کرده بود

public function access(){}

محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
0

محتوای داخل متد access چی بود خوب...؟

می‌تونه تعریف Eloquent Relation باشه:

class User extends Model {

    public function access()    {

        return $this->hasOne(Access::class);
        //Or:
        return $this->belongsTo(Access::class);

    }
}
$user_access = $user->access;

ftp
تخصص : ساده
@ftp 3 سال پیش مطرح شد
0

@mhyeganeh
محتوای داخل فانکشن یک return true بود


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام