s
Ильнур Табулдин authored
dcb0d3f4
Name Last commit Last update
src s
.gitignore s
README.md readme
composer.json s

Логгер изменений сущностей для 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,
            ...
        ];
    }
}