0 フォロワー

クラス yii\behaviors\BlameableBehavior

継承yii\behaviors\BlameableBehavior » yii\behaviors\AttributeBehavior » yii\base\Behavior » yii\base\BaseObject
実装yii\base\Configurable
利用可能なバージョン2.0
ソースコード https://github.com/yiisoft/yii2/blob/master/framework/behaviors/BlameableBehavior.php

BlameableBehavior は、指定された属性を現在のユーザー ID で自動的に埋めます。

BlameableBehavior を使用するには、次のコードを ActiveRecord クラスに挿入してください。

use yii\behaviors\BlameableBehavior;

public function behaviors()
{
    return [
        BlameableBehavior::class,
    ];
}

デフォルトでは、BlameableBehavior は、関連付けられた AR オブジェクトが挿入されるときに created_by および updated_by 属性を現在のユーザー ID で埋めます。AR オブジェクトが更新されるときに updated_by 属性を現在のユーザー ID で埋めます。

属性の値はこのビヘイビアによって自動的に設定されるため、通常はユーザー入力ではなく、したがって検証されるべきではありません。つまり、created_by および updated_by はモデルの rules() メソッドに表示されるべきではありません。

属性名が異なる場合は、次の例のように、$createdByAttribute および $updatedByAttribute プロパティを構成できます。

public function behaviors()
{
    return [
        [
            'class' => BlameableBehavior::class,
            'createdByAttribute' => 'author_id',
            'updatedByAttribute' => 'updater_id',
        ],
    ];
}

パブリックプロパティ

継承されたプロパティを隠す

プロパティ 説明 定義元
$attributes 配列 $value で指定された値で自動的に埋められる属性のリスト。 yii\behaviors\AttributeBehavior
$createdByAttribute 文字列 現在のユーザー ID 値を受け取る属性。作成者 ID を記録したくない場合は、このプロパティを false に設定します。 yii\behaviors\BlameableBehavior
$defaultValue 混合 ユーザーがゲストの場合のデフォルト値 yii\behaviors\BlameableBehavior
$owner yii\base\Component|null このビヘイビアのオーナー yii\base\Behavior
$preserveNonEmptyValues ブール値 空でない属性値を保持するかどうか。 yii\behaviors\AttributeBehavior
$skipUpdateOnClean ブール値 $owner が変更されていない場合に、このビヘイビアをスキップするかどうか yii\behaviors\AttributeBehavior
$updatedByAttribute 文字列 現在のユーザー ID 値を受け取る属性。更新者 ID を記録したくない場合は、このプロパティを false に設定します。 yii\behaviors\BlameableBehavior
$value 混合 現在の属性に割り当てられる値。 yii\behaviors\BlameableBehavior

パブリックメソッド

継承されたメソッドを隠す

メソッド 説明 定義元
__call() クラスメソッドではない指定されたメソッドを呼び出します。 yii\base\BaseObject
__construct() コンストラクタ。 yii\base\BaseObject
__get() オブジェクトプロパティの値を返します。 yii\base\BaseObject
__isset() プロパティが設定されているか、つまり定義されていて null でないかを確認します。 yii\base\BaseObject
__set() オブジェクトプロパティの値を設定します。 yii\base\BaseObject
__unset() オブジェクトプロパティを null に設定します。 yii\base\BaseObject
attach() ビヘイビアオブジェクトをコンポーネントにアタッチします。 yii\base\Behavior
canGetProperty() プロパティを読み取れるかどうかを示す値を返します。 yii\base\BaseObject
canSetProperty() プロパティを設定できるかどうかを示す値を返します。 yii\base\BaseObject
className() このクラスの完全修飾名を返します。 yii\base\BaseObject
detach() ビヘイビアオブジェクトをコンポーネントからデタッチします。 yii\base\Behavior
evaluateAttributes() 属性値を評価し、現在の属性に割り当てます。 yii\behaviors\AttributeBehavior
events() $owner のイベントのイベントハンドラを宣言します。 yii\behaviors\AttributeBehavior
hasMethod() メソッドが定義されているかどうかを示す値を返します。 yii\base\BaseObject
hasProperty() プロパティが定義されているかどうかを示す値を返します。 yii\base\BaseObject
init() オブジェクトを初期化します。 yii\behaviors\BlameableBehavior

プロテクトメソッド

継承されたメソッドを隠す

メソッド 説明 定義元
getDefaultValue() デフォルト値を取得 yii\behaviors\BlameableBehavior
getValue() 現在の属性の値を返します。 yii\behaviors\BlameableBehavior

プロパティの詳細

継承されたプロパティを隠す

$createdByAttribute パブリックプロパティ

現在のユーザー ID 値を受け取る属性。作成者 ID を記録したくない場合は、このプロパティを false に設定します。

public string $createdByAttribute 'created_by'
$defaultValue パブリックプロパティ (バージョン 2.0.14 以降で利用可能)

ユーザーがゲストの場合のデフォルト値

public mixed $defaultValue null
$updatedByAttribute public プロパティ

現在のユーザー ID 値を受け取る属性。更新者 ID を記録したくない場合は、このプロパティを false に設定します。

public string $updatedByAttribute 'updated_by'
$value public プロパティ

プロパティがnullの場合、Yii::$app->user->idの値が使用されます。

現在の属性に割り当てられる値。これは、匿名関数、配列形式で呼び出し可能なもの(例:[$this, 'methodName'])、DB式を表すExpressionオブジェクト(例:new Expression('NOW()'))、スカラー値、文字列、または任意の値を指定できます。前者の場合、関数の戻り値が属性に割り当てられます。関数のシグネチャは次のようになります。

function ($event)
{
    // return value will be assigned to the attribute
}
public mixed $value null

メソッドの詳細

継承されたメソッドを隠す

__call() public メソッド

定義元: yii\base\BaseObject::__call()

クラスメソッドではない指定されたメソッドを呼び出します。

このメソッドは、不明なメソッドが呼び出されたときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

public mixed __call ( $name, $params )
$name 文字列

メソッド名

$params 配列

メソッドのパラメータ

return 混合

メソッドの戻り値

throws yii\base\UnknownMethodException

不明なメソッドを呼び出した場合

                public function __call($name, $params)
{
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__construct() public メソッド

定義元: yii\base\BaseObject::__construct()

コンストラクタ。

デフォルトの実装では、次の2つの処理が行われます。

  • 指定された構成$configでオブジェクトを初期化します。
  • init()を呼び出します。

このメソッドが子クラスでオーバーライドされている場合は、次のことを推奨します。

  • コンストラクタの最後のパラメータは、ここでの$configのような構成配列にする。
  • コンストラクタの最後に親の実装を呼び出す。
public void __construct ( $config = [] )
$config 配列

オブジェクトのプロパティを初期化するために使用される名前と値のペア

                public function __construct($config = [])
{
    if (!empty($config)) {
        Yii::configure($this, $config);
    }
    $this->init();
}

            
__get() public メソッド

定義元: yii\base\BaseObject::__get()

オブジェクトプロパティの値を返します。

このメソッドは、$value = $object->property;を実行するときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

__set()も参照してください。

public mixed __get ( $name )
$name 文字列

プロパティ名

return 混合

プロパティの値

throws yii\base\UnknownPropertyException

プロパティが定義されていない場合

throws yii\base\InvalidCallException

プロパティが書き込み専用の場合

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() public メソッド

定義元: yii\base\BaseObject::__isset()

プロパティが設定されているか、つまり定義されていて null でないかを確認します。

このメソッドは、isset($object->property)を実行するときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

プロパティが定義されていない場合は、falseが返されることに注意してください。

https://www.php.net/manual/en/function.isset.phpも参照してください。

public boolean __isset ( $name )
$name 文字列

プロパティ名またはイベント名

return ブール値

指定されたプロパティが設定されているかどうか(nullではない)。

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    return false;
}

            
__set() public メソッド

定義元: yii\base\BaseObject::__set()

オブジェクトプロパティの値を設定します。

このメソッドは、$object->property = $value;を実行するときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

__get()も参照してください。

public void __set ( $name, $value )
$name 文字列

プロパティ名またはイベント名

$value 混合

プロパティの値

throws yii\base\UnknownPropertyException

プロパティが定義されていない場合

throws yii\base\InvalidCallException

プロパティが読み取り専用の場合

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter($value);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    } else {
        throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
    }
}

            
__unset() public メソッド

定義元: yii\base\BaseObject::__unset()

オブジェクトプロパティを null に設定します。

このメソッドは、unset($object->property)を実行するときに暗黙的に呼び出されるPHPのマジックメソッドであるため、直接呼び出さないでください。

プロパティが定義されていない場合、このメソッドは何もしないことに注意してください。プロパティが読み取り専用の場合、例外がスローされます。

https://www.php.net/manual/en/function.unset.phpも参照してください。

public void __unset ( $name )
$name 文字列

プロパティ名

throws yii\base\InvalidCallException

プロパティが読み取り専用の場合。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
    } elseif (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Unsetting read-only property: ' . get_class($this) . '::' . $name);
    }
}

            
attach() public メソッド

定義元: yii\base\Behavior::attach()

ビヘイビアオブジェクトをコンポーネントにアタッチします。

デフォルトの実装では、$ownerプロパティを設定し、events()で宣言されているイベントハンドラをアタッチします。このメソッドをオーバーライドする場合は、必ず親の実装を呼び出してください。

public void attach ( $owner )
$owner yii\base\Component

このビヘイビアがアタッチされるコンポーネント。

                public function attach($owner)
{
    $this->owner = $owner;
    foreach ($this->events() as $event => $handler) {
        $this->_attachedEvents[$event] = $handler;
        $owner->on($event, is_string($handler) ? [$this, $handler] : $handler);
    }
}

            
canGetProperty() public メソッド

定義元: yii\base\BaseObject::canGetProperty()

プロパティを読み取れるかどうかを示す値を返します。

プロパティは、次の場合に読み取り可能になります。

  • クラスが指定された名前に関連付けられたゲッターメソッドを持っている場合(この場合、プロパティ名は大小文字を区別しません)。
  • クラスが指定された名前のメンバー変数を持っている場合($checkVarsがtrueの場合)。

canSetProperty()も参照してください。

public boolean canGetProperty ( $name, $checkVars true )
$name 文字列

プロパティ名

$checkVars ブール値

メンバー変数をプロパティとして扱うかどうか

return ブール値

プロパティが読み取り可能かどうか

                public function canGetProperty($name, $checkVars = true)
{
    return method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name);
}

            
canSetProperty() public メソッド

定義元: yii\base\BaseObject::canSetProperty()

プロパティを設定できるかどうかを示す値を返します。

プロパティが書き込み可能であるのは、以下の場合です。

  • クラスが指定された名前に関連付けられたセッターメソッドを持っている場合(この場合、プロパティ名は大文字小文字を区別しません)。
  • クラスが指定された名前のメンバー変数を持っている場合($checkVarsがtrueの場合)。

参照: canGetProperty()

public boolean canSetProperty ( $name, $checkVars true )
$name 文字列

プロパティ名

$checkVars ブール値

メンバー変数をプロパティとして扱うかどうか

return ブール値

プロパティが書き込み可能かどうか

                public function canSetProperty($name, $checkVars = true)
{
    return method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name);
}

            
className() public static メソッド
2.0.14から非推奨。PHP >= 5.5 では、代わりに ::class を使用してください。

定義元: yii\base\BaseObject::className()

このクラスの完全修飾名を返します。

public static string className ( )
return 文字列

このクラスの完全修飾名。

                public static function className()
{
    return get_called_class();
}

            
detach() public メソッド

定義元: yii\base\Behavior::detach()

ビヘイビアオブジェクトをコンポーネントからデタッチします。

デフォルトの実装では、$owner プロパティがunsetされ、events() で宣言されたイベントハンドラがデタッチされます。このメソッドをオーバーライドする場合は、親の実装を必ず呼び出してください。

public void detach ( )

                public function detach()
{
    if ($this->owner) {
        foreach ($this->_attachedEvents as $event => $handler) {
            $this->owner->off($event, is_string($handler) ? [$this, $handler] : $handler);
        }
        $this->_attachedEvents = [];
        $this->owner = null;
    }
}

            
evaluateAttributes() public メソッド

定義元: yii\behaviors\AttributeBehavior::evaluateAttributes()

属性値を評価し、現在の属性に割り当てます。

public void evaluateAttributes ( $event )
$event yii\base\Event

                public function evaluateAttributes($event)
{
    if (
        $this->skipUpdateOnClean
        && $event->name == ActiveRecord::EVENT_BEFORE_UPDATE
        && empty($this->owner->dirtyAttributes)
    ) {
        return;
    }
    if (!empty($this->attributes[$event->name])) {
        $attributes = (array) $this->attributes[$event->name];
        $value = $this->getValue($event);
        foreach ($attributes as $attribute) {
            // ignore attribute names which are not string (e.g. when set by TimestampBehavior::updatedAtAttribute)
            if (is_string($attribute)) {
                if ($this->preserveNonEmptyValues && !empty($this->owner->$attribute)) {
                    continue;
                }
                $this->owner->$attribute = $value;
            }
        }
    }
}

            
events() public メソッド

定義元: yii\behaviors\AttributeBehavior::events()

$owner のイベントのイベントハンドラを宣言します。

子クラスは、このメソッドをオーバーライドして、$owner コンポーネントのイベントにアタッチする必要があるPHPコールバックを宣言できます。

コールバックは、ビヘイビアがオーナーにアタッチされたときに、$owner のイベントにアタッチされ、ビヘイビアがコンポーネントからデタッチされると、イベントからデタッチされます。

コールバックには、次のいずれかを指定できます。

  • このビヘイビアのメソッド: 'handleClick'[$this, 'handleClick'] と同等
  • オブジェクトメソッド: [$object, 'handleClick']
  • スタティックメソッド: ['Page', 'handleClick']
  • 匿名関数: function ($event) { ... }

以下に例を示します。

[
    Model::EVENT_BEFORE_VALIDATE => 'myBeforeValidate',
    Model::EVENT_AFTER_VALIDATE => 'myAfterValidate',
]
public array events ( )
return 配列

イベント(配列キー)と対応するイベントハンドラメソッド(配列値)。

                public function events()
{
    return array_fill_keys(
        array_keys($this->attributes),
        'evaluateAttributes'
    );
}

            
getDefaultValue() protected メソッド (バージョン 2.0.14 以降で利用可能)

デフォルト値を取得

protected array|mixed getDefaultValue ( $event )
$event yii\base\Event

                protected function getDefaultValue($event)
{
    if ($this->defaultValue instanceof \Closure || (is_array($this->defaultValue) && is_callable($this->defaultValue))) {
        return call_user_func($this->defaultValue, $event);
    }
    return $this->defaultValue;
}

            
getValue() protected メソッド

現在の属性の値を返します。

$value プロパティが null の場合、$defaultValue の値が値として使用されます。

このメソッドは、evaluateAttributes() によって呼び出されます。その戻り値は、トリガーイベントに対応する属性に割り当てられます。

protected mixed getValue ( $event )
$event yii\base\Event

現在の属性の更新をトリガーするイベント。

return 混合

属性の値

                protected function getValue($event)
{
    if ($this->value === null && Yii::$app->has('user')) {
        $userId = Yii::$app->get('user')->id;
        if ($userId === null) {
            return $this->getDefaultValue($event);
        }
        return $userId;
    } elseif ($this->value === null) {
        return $this->getDefaultValue($event);
    }
    return parent::getValue($event);
}

            
hasMethod() public メソッド

定義元: yii\base\BaseObject::hasMethod()

メソッドが定義されているかどうかを示す値を返します。

デフォルトの実装は、PHP関数 method_exists() の呼び出しです。PHPマジックメソッド __call() を実装した場合は、このメソッドをオーバーライドできます。

public boolean hasMethod ( $name )
$name 文字列

メソッド名

return ブール値

メソッドが定義されているかどうか

                public function hasMethod($name)
{
    return method_exists($this, $name);
}

            
hasProperty() public メソッド

定義元: yii\base\BaseObject::hasProperty()

プロパティが定義されているかどうかを示す値を返します。

プロパティが定義されているのは、以下の場合です。

  • クラスが指定された名前に関連付けられたゲッターまたはセッターメソッドを持っている場合(この場合、プロパティ名は大文字小文字を区別しません)。
  • クラスが指定された名前のメンバー変数を持っている場合($checkVarsがtrueの場合)。

参照:

public boolean hasProperty ( $name, $checkVars true )
$name 文字列

プロパティ名

$checkVars ブール値

メンバー変数をプロパティとして扱うかどうか

return ブール値

プロパティが定義されているかどうか

                public function hasProperty($name, $checkVars = true)
{
    return $this->canGetProperty($name, $checkVars) || $this->canSetProperty($name, false);
}

            
init() public メソッド

オブジェクトを初期化します。

このメソッドは、オブジェクトが指定された構成で初期化された後、コンストラクターの最後に呼び出されます。

public void init ( )

                public function init()
{
    parent::init();
    if (empty($this->attributes)) {
        $this->attributes = [
            BaseActiveRecord::EVENT_BEFORE_INSERT => [$this->createdByAttribute, $this->updatedByAttribute],
            BaseActiveRecord::EVENT_BEFORE_UPDATE => $this->updatedByAttribute,
        ];
    }
}