Логгер изменений сущностей для Yii2
Установка
Через composer:
"repositories": [
...
{
"type": "git",
"url": "https://gitlab.deck.lc/deckko/logger.git"
}
]
composer require deck/logger
Конфигурация
main configuration file:
'bootstrap' => [
...
'logger',
],
'modules' => [
...
'logger' => [
'class' => \deck\logger\Module::class,
'serializerMappingClass' => // your implementation of deck\logger\interfaces\SerializerMappingI,
],
],
'components' => [
'logger' => [
// [basic Yii2 Queue configuration](https://www.yiiframework.com/extension/yiisoft/yii2-queue/doc/guide/2.0/en/usage#configuration)
],
'mutex' => [
'class' => // Mutex mechanism implementation class (e.g. \yii\mutex\FileMutex::class),
],
]
Миграции
migration config file
'controllerMap' => [
...
'migrate' => [
'class' => 'yii\console\controllers\MigrateController',
...
'migrationNamespaces' => [
...
'deck\logger\migrations'
],
],
],
php yii migrate
Реализация функционала
Внести данные сущности в таблицу logger.entity_type
class EntityTypeEnum
{
public const CUSTOM = 1;
...
}
class Custom extends \yii\db\ActiveQuery {
...
public function behaviors():array
{
return array_merge(parent::behaviors(), [
'logger' => [
'class' => \deck\logger\Logger::class,
'model' => this,
'entityTypeId' => EntityTypeEnum::CUSTOM,
]
]);
}
}
use deck\logger\Prop
class CustomEventSerializer extends \deck\logger\api\serializers\EventAttributesSerializer
{
/**
* @return EventAttributeSerializer[]
*/
public function fields(): array
{
$fields = parent::fields();
$fields['custom_attribute'] = new EventAttributeSerializer([
'eventAttribute' => $this->eventAttributes['custom_attribute'],
'callback' => function ($value) {...},
'label' => 'custom attribute',
]);
unset($fields['another_custom_attribute']);
return $fields;
}
}
namespace common\serializers\logger;
use deck\logger\interfaces\SerializerMappingI;
class SerializerMapping implements SerializerMappingI {
public function map(): array
{
return [
EntityTypeEnum::CUSTOM => CustomEventSerializer::class,
...
];
}
}