Laravelの属性

Barbara Streisand
Barbara Streisandオリジナル
2025-01-20 04:06:09997ブラウズ

Laravel Attributes

Laravel Eloquent モデルで、アクセサー メソッドから profile_image プロパティを使用し、プロパティが空または false の場合にフォールバック値として /user.png を返したい場合は、モデル内でアクセサーを定義できます。その方法は次のとおりです:

<code class="language-php">class User extends Authenticatable
{
    // 其他模型代码...

    public function getProfileImageAttribute($value)
    {
        return $value ? asset('/storage' . $value) : url('/user.png');
    }
}</code>

User モデルでこのアクセサーを定義した後、User モデル インスタンスの profile_image プロパティにアクセスするたびに、このアクセサー メソッドが通過します。値が空でない場合 ($value が true と評価される場合)、その値に基づいてリソース URL が返されます。それ以外の場合は、代替 URL /user.png を返します。

その後、Blade テンプレートで次のものを直接使用できます。

<code class="language-blade">auth()->user()->profile_image</code>

追加のロジックは必要ありません:

<code class="language-blade"><img alt="User Image" src="{{ auth()->user()->profile_image }}"></img></code>

メソッド名が getProfileImageAttribute($value) なのはなぜですか?

Laravel の Eloquent ORM では、プロパティ アクセサーは 3 つの部分からなる命名規則を使用して定義されます。

  1. get: これは、メソッドがゲッター アクセサーであることを示します。プロパティの値を取得するときに使用されます。

  2. AttributeName: この部分は、アクセサーを定義するプロパティの名前を表します。この場合はProfileImageです。通常、プロパティ名には「StudlyCaps」大文字小文字が使用されます。これは、名前内の各単語が大文字で始まり、単語間にスペースやアンダースコアが含まれないことを意味します。

  3. Attribute: この部分は、メソッドがプロパティ アクセサーであることを示します。したがって、これらをまとめると、getProfileImageAttribute($value) は次のことを意味します:

    • get: これはゲッター アクセサーです。
    • ProfileImage: profile_image 属性に使用されます。
    • Attribute: これはプロパティ アクセサーです。

この命名規則は、プロパティ アクセサーを Eloquent モデル内の対応するプロパティに自動的にマップするために使用されます。 $model->profile_image を使用して profile_image プロパティの値を取得すると、Laravel は内部で getProfileImageAttribute という名前のアクセサーメソッドを探してプロパティの値を提供します。この規則により、Laravel は追加の設定を行わずに、必要に応じてアクセサー メソッドを自動的に呼び出すことができます。

以上がLaravelの属性の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。