Laravel でアクセサーとミューテーターを定義する新しい方法!


ご存じのとおり、以下のように accessor and mutator in laravel を定義する方法があります.

たとえば、ユーザー モデル (App\Models\User) にいる場合:


「名」ゲッターの場合




 public function getFirstNameAttribute($value)
 {
        return ucfirst($value);
 }




「ファーストネーム」の場合




 public function setFirstNameAttribute($value)
 {
        $this->attribute['first_name'] = strtolower($value);
 }


このシナリオを達成するための新しい方法がありますが、Taylor Otwell が実際に言及したと言わざるを得ません.これは非常に便利で素晴らしいものです.

以下のように、セッターとゲッターの両方を 1 つのメソッドで定義できます.


public function firtName() :Attribute
{
    return new Attribute (
        get: fn($value, $attributes) => $attribute['first_name'],
        set: fn($value) => 'first_name' => $value
    );
}



これは、アクセサーとミューテーターの両方を 1 つの属性関数で定義する別の方法となります.これらのいずれも書きたくない場合は、単純に get/set に null 値を渡すことができます.

ユーザーモデルがそれを取り締まるために、さらに2つの例を見てみましょう.

 public function fullName() :Attribute
 {
        return new Attribute(
            get: fn($value, $attributes) => $attributes['first_name'] . ' ' . $attributes['last_name'],
            set: function($value) {
                [$firstName, $lastName] = explode(" ", $value);

                return [
                    'first_name' => $firstName,
                    'last_name' => $lastName
                ];
            }
        );
   }

    public function password() :Attribute
    {
        return new Attribute(
            get: null,
            set: fn($value) => bcrypt($value)
        );
    }


それだけです...何か質問はありますか?