2017-04-12 4 views
1

$model->save()の後に、またはそれ以前にカスタムコードを実行したい場合は、Yii2です。私はグローバルcomponentsを使用してのように、これを実行したい

など

私がしたい。このためので、私は、ユーザーがデータベーステーブル内の任意の行を挿入または更新回数を格納するために、ユーザーのアクティビティログを作成したいですこれまでデータがテーブルに挿入または更新されたときにいくつかのコードを実行します。

ご意見やご提案をいただければ幸いです。

答えて

0

と記載されており、ActiveRecordは、beforeSaveafterSaveの方法を有する。

新しいレコード(および既存のレコードが更新されたときの更新日)に作成された日付を格納するために、次のようなものを使用します。この例のコードは、もちろん簡単ですが、必要な任意のコードを使用することができます。レイアウトと、新しいレコードと既存のコードを分割する方法を参照してください。

このオーバーライドされたメソッドは、親beforeSaveも正しく呼び出すことができるようにActiveRecordを拡張するすべてのモデルクラスに追加することができます。追加するために編集され

/** 
* @inheritdoc 
*/ 
public function beforeSave($insert) 
{ 
    if ($insert) { 
     // This is a new instance of modelClass, run your 'insert' code here. 
     $this->created_date = time(); 
    } 
    // Anything else will be run any time a model is saved. 
    $this->updated_date = time(); 

    return parent::beforeSave($insert); 
} 

: をコードが実行される場合は、あなたが形質を作成し、一つの場所に動作を変更することができるように、各モデルに形質を使用することができ、各モデルでも同じです。または、カスタムのActiveRecordクラスを作成して、各サブクラスに対してbeforeSaveメソッドをオーバーライドします。

+0

コンポーネントとして、またはグローバル関数として使用します。私はほぼ80モデルのファイルを持っており、私はすべてのファイルを編集し、そこにこのコードを書くのは難しいです。 @FahadAli; –

+0

;その場合、おそらく特性やカスタムスーパークラスですか? –

+0

あなたは私に何かを提案できますか –

0

新しいクラス\ Yiiの\ DB \ ActiveRecordの

使用して、すべてのプロジェクトのモデルに

例MyActiveRecord拡張拡張(MyActiveRecord)を作成します。プロジェクトでは

class MyActiveRecord extends \yii\db\ActiveRecord 
{ 

public function afterSave($insert, $changedAttributes){ 
    //This will called after every model saved 

    return parent::beforeSave($insert,$changedAttributes); 
} 




} 

を他のモデル

class Customer extends app\models\MyActiveRecord 
{ 



} 
+0

コンポーネントとして、あるいはグローバルな機能として使いたいですか?私はほぼ80モデルのファイルを持っており、私はすべてのファイルを編集し、そこにこのコードを書くのは難しいです。 –

関連する問題