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
+
```