yii2-activity-logger
|
ΠΡΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΡΡ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅.
ΠΠΎΠ³Π΄Π° Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅ Π½Π°Π΄ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π²ΡΡ
ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΠΊΡΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΈ Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠ°ΡΡΠΈ, ΡΠ±ΡΠ°Π» ΡΡΠ°ΡΡΡ ΠΈΠ· ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ, Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠ΄Π°Π»ΠΈΠ» ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π±ΡΠ»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΡΡ Π°Π²ΡΠΎΡΠ° Π·Π° ΡΡΠ΅ΡΠ΄Π½ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ.
|
, (*1)
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ
~$ composer require --prefer-dist lav45/yii2-activity-logger
ΠΠΈΠ³ΡΠ°ΡΠΈΠΈ
ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ MigrateController
, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π» ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ².
Π Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄:, (*2)
return [
'controllerMap' => [
'migrate' => [
'class' => \yii\console\controllers\MigrateController::class,
'migrationPath' => [
'@app/migrations',
'@vendor/lav45/yii2-activity-logger/migrations',
],
],
],
];
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, (*3)
~$ yii migrate
ΠΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ», (*4)
return [
'modules' => [
/**
* ΠΠΎΠ΄ΡΠ»Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π»ΠΎΠ³ΠΎΠ²
*/
'logger' => [
'class' => \lav45\activityLogger\modules\Module::class,
// Π‘ΠΏΠΈΡΠΎΠΊ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ
'entityMap' => [
'news' => 'common\models\News',
Β Β Β Β Β Β ],
Β Β Β Β ]
],
'components' => [
/**
* ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π»ΠΎΠ³Π°ΠΌΠΈ
*/
'activityLogger' => [
'class' => \lav45\activityLogger\Manager::class,
// ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ PROD Π²Π΅ΡΡΠΈΠΈ
'enabled' => YII_ENV_PROD,
// ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° `\yii\web\User`
'user' => 'user',
// ΠΠΎΠ»Π΅ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ· ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
'userNameAttribute' => 'username',
// ΠΡΠ΅ΡΠΈΠΊΡ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ userId Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π°Π²ΡΠΎΡΠΈΠ·ΡΠ΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π½ΡΡ
ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ
'userIdPrefix' => 'u',
// ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π»ΠΎΠ³ΠΎΠ² `\lav45\activityLogger\StorageInterface`
'storage' => 'activityLoggerStorage',
],
/**
* ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π»ΠΎΠ³Π°ΠΌΠΈ
*/
'activityLoggerStorage' => [
'class' => \lav45\activityLogger\DbStorage::class,
// ΠΠΌΡ ΡΠ°Π±Π»ΠΈΡΡ Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄ΡΡ Ρ
ΡΠ°Π½ΠΈΡΡΡ Π»ΠΎΠ³ΠΈ
'tableName' => '{{%activity_log}}',
// ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° `\yii\db\Connection`
'db' => 'db',
],
]
];
ΠΠ½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π»ΠΎΠ³ Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΌΠΎΠΆΠ½Π° Π·Π°Π΄Π°ΡΡ ΡΠ΅ΡΠ΅Π· Yii::$container
ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΡΠΎΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠ°ΠΉΠ»Π΅ bootstrap.php
, (*5)
Yii::$container->set(\lav45\activityLogger\LogMessageDTO::class, [
'env' => 'console', // ΠΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
'userId' => 'console',
'userName' => 'Droid R2-D2',
]);
Π‘ΡΡΠ»ΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π»ΠΎΠ³ΠΎΠ²
// ΠΠ° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ΅ Π»ΠΎΠ³ΠΈ
Url::toRoute(['/logger/default/index']);
// ΠΠ° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΆΡΡΠ½Π°Π»Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΠΎ Π³ΠΎ `$id`
Url::toRoute(['/logger/default/index', 'userId' => 1]);
// ΠΠ° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΆΡΡΠ½Π°Π»Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² "news"
Url::toRoute(['/logger/default/index', 'entityName' => 'news']);
// ΠΠ° ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΆΡΡΠ½Π°Π»Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² "news" Ρ "id" => 1
Url::toRoute(['/logger/default/index', 'entityName' => 'news', 'entityId' => 1]);
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ActiveRecord ΠΌΠΎΠ΄Π΅Π»ΠΈ
/**
* @mixin \lav45\activityLogger\ActiveLogBehavior
*/
class News extends ActiveRecord
{
// Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
public function transactions()
{
return [
ActiveRecord::SCENARIO_DEFAULT => ActiveRecord::OP_ALL,
];
}
public function behaviors()
{
return [
[
'class' => \lav45\activityLogger\ActiveLogBehavior::class,
// ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
Π°Π΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ `entityName`
'getEntityName' => function () {
return static::tableName();
},
// ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
Π°Π΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ `entityId`
'getEntityId' => function () {
return $this->getPrimaryKey();
}
/**
* Π ΡΠ»ΡΡΠ°ΡΡ
ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ActiveLogBehavior Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡ Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ.
* ΠΡΠ»ΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ,
* ΡΠΎ Π½Π΅Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ½ΡΡΠ½ΠΎ Ρ ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΡΡΠ°ΡΡΡ, Π΄Π΅Π½Ρ ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅
*/
'beforeSaveMessage' => function ($data) {
return ['attribute' => 'custom data'] + $data;
}
// Π‘ΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»Π΅ΠΉ Π·Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠΎΡΡΡ
Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΠ΅
'attributes' => [
// ΠΡΠΎΡΡΡΠ΅ ΠΏΠΎΠ»Ρ ( string|int|bool )
'name',
// ΠΠΎΠ»Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΠΏΠΈΡΠΊΠ΅.
// Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ `$model->getStatusList()[$model->status]`
'status' => [
'list' => 'statusList',
],
// ΠΠΎΠ»Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ `id` ΡΠ²ΡΠ·ΠΈ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ
'template_id' => [
'relation' => 'template',
// ΠΠΎΠ»Π΅ ΠΈΠ· ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
'attribute' => 'name',
],
]
],
[
/**
* Π ΡΠ»ΡΡΠ°ΡΡ
ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ Π²ΡΠ΅Ρ
Π»ΠΎΠ³ΠΎΠ² Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡ Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ.
* ΠΡΠ»ΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ,
* ΡΠΎ Π½Π΅Π²ΡΠ΅Π³Π΄Π° ΠΏΠΎΠ½ΡΡΠ½ΠΎ Ρ ΠΊΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΡΡΠ°ΡΡΡ, Π΄Π΅Π½Ρ ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅
*/
'class' => \lav45\activityLogger\LogInfoBehavior::class,
'template' => '{username} ({profile.email})',
],
];
}
/**
* ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
Π°Π΄ΠΈΠΌΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠΎΠ±ΠΎΠ°ΠΆΠ΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
* ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ `\yii\i18n\Formatter`
* ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ
* @return array
*/
public function attributeFormats()
{
return [
// ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΡΡΠΈΠ±ΡΠ΄Π° Π±ΡΠ΄Π΅Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Yii::$app->formatter->asDatetime($value);
'published_at' => 'datetime',
// ΠΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°
'is_published' => function($value) {
return Yii::$app->formatter->asBoolean($value);
},
// ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ ΠΈ ΡΡΡΠ»ΠΊΡ Π½Π° Π½Π΅Ρ
'image' => function($value) {
if (empty($value)) { return null; }
$url = "https://cdn.site.com/img/{$value}";
return Html::a($value, $url, ['target' => '_blank']);
}
];
}
/**
* Π ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ `\lav45\activityLogger\ActiveLogBehavior` Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΠ΅
* [[ActiveLogBehavior::EVENT_BEFORE_SAVE_MESSAGE]] - ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΠΈΡΡΡ Π»ΠΎΠ³ΠΎΠ²
* [[ActiveLogBehavior::EVENT_AFTER_SAVE_MESSAGE]] - ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΠΈΡΠΈ Π»ΠΎΠ³ΠΎΠ²
*/
public function init()
{
parent::init();
// Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ
$this->on(ActiveLogBehavior::EVENT_BEFORE_SAVE_MESSAGE,
function (\lav45\activityLogger\MessageEvent $event) {
// ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ Π»ΠΎΠ³ΠΎΠ² ΡΠ²ΠΎΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
$event->logData[] = 'Reset password';
});
$this->on(ActiveLogBehavior::EVENT_AFTER_SAVE_MESSAGE,
function (\yii\base\Event $event) {
// ΠΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΠΈΡΠΈ Π»ΠΎΠ³ΠΎΠ²
});
}
/*
* Π ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ΄Π½Π°ΠΈΠΌΠ΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΡ
*/
/**
* ΠΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΡ [[ActiveLogBehavior::EVENT_BEFORE_SAVE_MESSAGE]]
* @return array
*/
public function beforeSaveMessage($data)
{
// ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ Π»ΠΎΠ³ΠΎΠ² ΡΠ²ΠΎΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ
$data[] = 'Reset password';
// ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π»ΠΎΠ³Π°Ρ
Π΄Π»Ρ Π°ΡΡΠΈΠ±ΡΡΠ° `password_hash`
$data['password_hash'] = 'Reset password';
return $data;
}
/**
* ΠΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π² ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ±ΡΡΠΈΡ [[ActiveLogBehavior::EVENT_AFTER_SAVE_MESSAGE]]
*/
public function afterSaveMessage()
{
// ΠΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΠΈΡΠΈ Π»ΠΎΠ³ΠΎΠ²
}
}
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π΄Π»Ρ ΠΎΡΠΈΡΡΠΊΠΈ Π»ΠΎΠ³ΠΎΠ²
ΠΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ ΡΠ΄Π°Π»ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π»ΠΎΠ³ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΠΏΡΠ½ΠΊΡ., (*6)
return [
'controllerMap' => [
'logger' => [
'class' => \lav45\activityLogger\console\DefaultController::class
]
],
];
ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π°Π»ΠΈΡΡ ΡΡΠ°ΡΡΠ΅ Π»ΠΎΠ³ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ:, (*7)
~$ yii logger/clean --old-than=1y
# => Deleted 5 record(s) from the activity log.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
-
--entity-id, -eid
: string. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, (*8)
-
--entity-name, -e
: string. ΠΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, (*9)
-
--user-id, -uid
: string. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, (*10)
-
--log-action, -a
: string. ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ Π½Π°Π΄ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, (*11)
-
--env
: string. Π‘ΡΠ΅Π΄Π°, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, (*12)
-
--old-than, -o
: string. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΡ
Π΄Π°Π½Π½ΡΡ
, (*13)
ΠΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ:, (*14)
- 1h - ΡΡΠ°ΡΡΠ΅ 1 ΡΠ°ΡΠ°
- 2d - ΡΡΠ°ΡΡΠ΅ 2 Π΄Π½Π΅ΠΉ
- 3m - ΡΡΠ°ΡΡΠ΅ 3-Ρ
ΠΌΠ΅ΡΡΡΠ΅Π²
- 4y - ΡΡΠ°ΡΡΠ΅ 4 Π»Π΅Ρ.
Π ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΎΠ²
ΠΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅Ρ
ΡΠ»ΡΡΠ°ΡΡ
ΠΊΠΎΠ³Π΄Π° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ActiveRecord ΠΌΠΎΠ΄Π΅Π»ΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΠΎΡΡΠ΅ΡΠΎΠ², ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ°Π±ΠΎΡΠ° Ρ Π²Π½Π΅ΡΠ½ΠΈΠΌ API, Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΠΈ Ρ.Π΄, (*15)
use lav45\activityLogger\LogMessageDTO;
$message = Yii::createObject([
'class' => LogMessageDTO::class,
// ΠΈΠΌΡ ΡΡΡΠ½ΠΎΡΡΠΈ
'entityName' => 'user',
// id ΡΡΡΠ½ΠΎΡΡΠΈ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
'entityId' => 10,
// ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ΅ΠΉΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ
'action' => 'download',
// ΡΠ΅ΠΊΡΡ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ
'data' => ['export data'],
]);
Yii::$app->activityLogger->log($message);
ΠΠΎΠ³Π΄Π° Π² Π»ΠΎΠ³Π°Ρ
Π½ΡΠΆΠ½Π° ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎΠ΄Π½Ρ Π·Π°ΠΏΠΈΡΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ
Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ LogCollection
, (*16)
use lav45\activityLogger\LogCollection;
$collection = new LogCollection(Yii::$app->activityLogger, 'entityName');
/**
* ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π·Π°ΠΏΠΈΡΠΈ
*/
$collection->addMessage('Created: 100');
$collection->addMessage('Updated: 100500');
$collection->addMessage('Deleted: 5');
/**
* Π‘ΠΎΡ
ΡΠ°Π½ΡΠ΅ΠΌ Π²ΡΠ΅ ΡΠΎΠ±ΡΠ°Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Ρ Π·Π°ΠΏΠΈΡΡ Π² Π»ΠΎΠ³Π°Ρ
* ΠΠΎΡΠ»ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΡΠΏΠΈΡΠΎΠΊ Π»ΠΎΠ³ΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΡΠ΅Π½
*/
$collection->push(); // => true
Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
~$ docker build --pull --build-arg UID=$(id -u) --build-arg GID=$(id -g) --rm -t php74-test .
~$ ./container composer update --prefer-dist
~$ ./container vendor/bin/phpunit
ΠΠΈΡΠ΅Π½Π·ΠΈΠΈ
ΠΠ»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ°ΠΉΠ» LICENSE.md., (*17)