Loggable

← Loggable

Ashterix

docs: Doctrine section with Doctrine Behaviors and Doctrine Helper (uk + en)

uk/docs/doctrine/doctrine-behaviors/loggable.md новий файл +54 −0

Loggable

Пише в PSR-3 логер повідомлення про створення, зміну і видалення сутності.

Сутність

use Doctrine\ORM\Mapping as ORM;
use Ufo\DoctrineBehaviors\Contract\Entity\LoggableInterface;
use Ufo\DoctrineBehaviors\Model\Loggable\LoggableTrait;

#[ORM\Entity]
class Category implements LoggableInterface
{
    use LoggableTrait;

    #[ORM\Id, ORM\GeneratedValue, ORM\Column]
    private ?int $id = null;

    #[ORM\Column]
    private string $title = '';

    public function getId(): ?int
    {
        return $this->id;
    }
}

Трейт викликає getId(), тож метод має бути в сутності. Колонок поведінка не додає.

Як це працює

Подія Повідомлення (рівень info)
postPersist App\Entity\Category #1 created і зміни полів
postUpdate по рядку на кожне змінене поле: App\Entity\Category #1 : property "title" changed from "Old" to "New"
preRemove App\Entity\Category #1 removed

Масиви в повідомленні замінюються на an array, значення DateTime форматуються як Y-m-d H:i:s.u.

Повідомлення формують методи getCreateLogMessage(), getUpdateLogMessage(array $changeSets) і getRemoveLogMessage() — перевизначте їх у сутності, щоб змінити текст.

Логер

LoggableEventSubscriber отримує Psr\Log\LoggerInterface автовайрингом — у застосунку з MonologBundle це канал app. Інший канал або сервіс:

# config/services.yaml
services:
    Ufo\DoctrineBehaviors\EventSubscriber\LoggableEventSubscriber:
        arguments:
            $logger: '@monolog.logger.doctrine'