راکت

سوال در مورد mutator

4 پاسخ

@ali.bayat
@mhyeganeh
@sina.it91

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

user->access
ثبت پرسش جدید

پاسخ‌ها

4
محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

چیزی که میگید بیشتر شبیه 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
@ftp

تخصص: ساده

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


$user->access  

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

public function access(){}

شاید پاسخ شما همین‌جا باشد

محمدحسن یگانه
محمدحسن یگانه
@mhyeganeh

تخصص: Full-Stack Web Developer Freelancer

محتوای داخل متد 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
@ftp

تخصص: ساده

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

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

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