2017-04-12 56 views
1

我想以後還是每$model->save()Yii2之前執行我的自定義代碼。

我想執行這一全球喜歡使用components

我想創建一個用戶活動日誌存儲了多少次用戶插入或更新數據庫表中的所有行,所以爲了這個,我想在表中插入或更新數據時運行一些代碼。

任何幫助或建議將不勝感激。

回答

0

正如@patryk提到的ActiveRecordbeforeSaveafterSave方法。

我用類似下面的存儲新記錄(當現有記錄更新更新日期)創建的日期。這個例子中的代碼當然是微不足道的,但它允許您使用任何您需要的任意代碼,查看佈局以及如何爲新「記錄」和現有代碼分割代碼。

可以將此重寫的方法添加到任何擴展了ActiveRecord的模型類,以允許父代beforeSave也被正確調用。

/** 
* @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個型號的文件,我很難編輯每個文件並在那裏寫這個代碼。 –

+0

@FahadAli;在那種情況下,也許是特質或自定義的超類? –

+0

可以請你建議我 –

0

創建新類(MyActiveRecord)延伸\警予\ DB \ ActiveRecord的

使用擴展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個型號的文件,我很難編輯每個文件並在那裏寫這個代碼。 –

相關問題