🐣
Laravel 新型アクセサ/ミューテタを試してみた
前書き
Laravel Ver.8.77 で追加された新型アクセサ/ミューテタ機能を試してみました。
(この機能を使うには、PHP8 以上が必要です)
以前からある getHogeAttribute / setHogeAttribute 形式は、今後もサポートされます。
ただ、ドキュメントは置き換わってしまうとか。(執筆時点ではまだ以前のままです)
参考:Attribute Cast / Accessor Improvements #40022
参考:Laravel 8.x Eloquent:ミューテタ/キャスト
本題
ということで、Models/User.php に以下の感じで追記してみます。
User.php
use Illuminate\Database\Eloquent\Casts\Attribute; // ← 名前空間も忘れずに
class User extends Authenticatable
{
protected function name(): Attribute
{
return new Attribute(
get: fn ($value) => strtoupper($value),
set: fn ($value) => $value.' 様',
);
}
}
web.php に以下の感じで記述してみます。
web.php
Route::get('/', function () {
$user = new User();
$user->name = 'foo bar';
return $user->name;
});
すると、以下の感じで出力されました。
FOO BAR 様
get: / set: の設定はどちらか一方だけでも大丈夫です。これは、PHP8 から導入された「名前付き引数」という機能ですので、PHP8 以上が必須になりますね。
雑感
凄いですね。
まぁ個人的には、アクセサ/ミューテタは、あまり使わなかったりもしますが…。
おかしな箇所等あったらコメント下さい。
Discussion