As you know there is a way to define accessor and mutator in laravel like below.
For example if we are in user model (App\Models\User):
For 'first name' Getter
public function getFirstNameAttribute($value) { return ucfirst($value); }
For 'first name' Settter
public function setFirstNameAttribute($value) { $this->attribute['first_name'] = strtolower($value); }
There is a new way to achieve this scenario But I must say Taylor Otwell actually mentioned it and it is quite useful and nice.
You can define both setter and getter in one single method like below:
public function firstName() :Attribute { return new Attribute ( get: fn($value, $attributes) => $attribute['first_name'], set: fn($value) => 'first_name' => $value ); }
and that would do it as another way to define accessors and mutators both in one attribute function. If don't want to write any of these you can simply pass a null value for get/set.
Lets see two more examples for user model to cracked it down:
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) ); }
That's it... any questions?
Top comments (0)