0

yii コンポーネント gii によって生成されたモデルはほとんどありません。今、私は作成者、作成時間、更新時間を自動的に挿入したいと考えています。Yii Cookbook には存在します。最初のバリアント:

    パブリック関数の動作()
    {
    配列を返します(
        'タイムスタンプ' => 配列(
            'class' => 'zii.behaviors.CTimestampBehavior',
            'createAttribute' => 'created_on',
            'updateAttribute' => 'modified_on',
            'setUpdateOnCreate' => true,
            )、
        );
    }

そして、ここに 2 番目のバリアントがあります。

    保護された関数 beforeValidate()
    {
    if($this->getIsNewRecord())
        $this->created_on = time();
    $this->modified_on = time();
    true を返します。
    }

私の状況では、それを拡張するすべてのモデルで beforeSave メソッドを置き換えるクラスを作成する必要があります。違いますか?

4

1 に答える 1

0

それを動作に実装し、その動作を発生させたいすべてのクラスにアタッチする必要があります。

コンポーネント動作の使用

コンポーネントはミックスインパターンをサポートし、1 つまたは複数の動作に関連付けることができます。ビヘイビアとは、特殊化 (つまり、通常のクラス継承) ではなく機能を収集する手段を通じて、接続されたコンポーネントによってメソッドを「継承」できるオブジェクトです。コンポーネントは複数の動作に関連付けることができるため、「多重継承」を実現できます。

動作クラスはIBehaviorインターフェイスを実装する必要があります。ほとんどの動作は、CBehavior基本クラスから拡張できます。動作をモデルに関連付ける必要がある場合は、モデル固有の追加機能を実装するCModelBehaviorまたはCActiveRecordBehaviorから拡張することもできます。

ビヘイビアを使用するには、ビヘイビアのattach()メソッドを呼び出して、最初にコンポーネントにアタッチする必要があります。次に、コンポーネントを介してビヘイビア メソッドを呼び出すことができます。

// $name uniquely identifies the behavior in the component
$component->attachBehavior($name,$behavior);
// test() is a method of $behavior
$component->test();

添付された動作は、コンポーネントの通常のプロパティのようにアクセスできます。たとえば、tree という名前の動作がコンポーネントにアタッチされている場合、次を使用してこの動作オブジェクトへの参照を取得できます。

$behavior=$component->tree;
// equivalent to the following:
// $behavior=$component->asa('tree');

コンポーネントを介してメソッドを使用できないように、動作を一時的に無効にすることができます。例えば、

$component->disableBehavior($name);
// the following statement will throw an exception
$component->test();
$component->enableBehavior($name);
// it works now
$component->test();

同じコンポーネントに関連付けられた 2 つの動作が同じ名前のメソッドを持っている可能性があります。この場合、最初にアタッチされたビヘイビアのメソッドが優先されます。

eventsと一緒に使用すると、動作はさらに強力になります。ビヘイビアーは、コンポーネントにアタッチされると、そのメソッドの一部をコンポーネントのイベントにアタッチできます。そうすることで、動作はコンポーネントの通常の実行フローを観察または変更する機会を得ます。

ビヘイビアーのプロパティには、アタッチされているコンポーネントからもアクセスできます。プロパティには、パブリック メンバー変数と、動作のゲッターやセッターを介して定義されたプロパティの両方が含まれます。たとえば、動作に xyz という名前のプロパティがあり、その動作がコンポーネント $a に関連付けられているとします。次に、式$a->xyzを使用して動作のプロパティにアクセスできます。

詳細:
http://www.yiiframework.com/wiki/44/behaviors-events
http://www.ramirezcobos.com/2010/11/19/how-to-create-a-yii-behavior/

于 2012-06-24T20:58:03.853 に答える