Loggable

← Loggable

Ashterix

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

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

1 + # Loggable
2 +
3 + Пише в PSR-3 логер повідомлення про створення, зміну і видалення сутності.
4 +
5 + ## Сутність
6 +
7 + ```php
8 + use Doctrine\ORM\Mapping as ORM;
9 + use Ufo\DoctrineBehaviors\Contract\Entity\LoggableInterface;
10 + use Ufo\DoctrineBehaviors\Model\Loggable\LoggableTrait;
11 +
12 + #[ORM\Entity]
13 + class Category implements LoggableInterface
14 + {
15 + use LoggableTrait;
16 +
17 + #[ORM\Id, ORM\GeneratedValue, ORM\Column]
18 + private ?int $id = null;
19 +
20 + #[ORM\Column]
21 + private string $title = '';
22 +
23 + public function getId(): ?int
24 + {
25 + return $this->id;
26 + }
27 + }
28 + ```
29 +
30 + Трейт викликає `getId()`, тож метод має бути в сутності. Колонок поведінка не додає.
31 +
32 + ## Як це працює
33 +
34 + | Подія | Повідомлення (рівень `info`) |
35 + | --- | --- |
36 + | `postPersist` | `App\Entity\Category #1 created` і зміни полів |
37 + | `postUpdate` | по рядку на кожне змінене поле: `App\Entity\Category #1 : property "title" changed from "Old" to "New"` |
38 + | `preRemove` | `App\Entity\Category #1 removed` |
39 +
40 + Масиви в повідомленні замінюються на `an array`, значення `DateTime` форматуються як `Y-m-d H:i:s.u`.
41 +
42 + Повідомлення формують методи `getCreateLogMessage()`, `getUpdateLogMessage(array $changeSets)` і `getRemoveLogMessage()` — перевизначте їх у сутності, щоб змінити текст.
43 +
44 + ## Логер
45 +
46 + `LoggableEventSubscriber` отримує `Psr\Log\LoggerInterface` автовайрингом — у застосунку з MonologBundle це канал `app`. Інший канал або сервіс:
47 +
48 + ```yaml
49 + # config/services.yaml
50 + services:
51 + Ufo\DoctrineBehaviors\EventSubscriber\LoggableEventSubscriber:
52 + arguments:
53 + $logger: '@monolog.logger.doctrine'
54 + ```