docs: Doctrine section with Doctrine Behaviors and Doctrine Helper (uk + en)
uk/docs/doctrine/doctrine-behaviors/blameable.md
новий файл +63
−0
1
+
# Blameable
2
+
3
+
Зберігає, хто створив, востаннє змінив і видалив сутність.
4
+
5
+
## Сутність
6
+
7
+
```php
8
+
use Doctrine\ORM\Mapping as ORM;
9
+
use Ufo\DoctrineBehaviors\Contract\Entity\BlameableInterface;
10
+
use Ufo\DoctrineBehaviors\Model\Blameable\BlameableTrait;
11
+
12
+
#[ORM\Entity]
13
+
class Category implements BlameableInterface
14
+
{
15
+
use BlameableTrait;
16
+
17
+
#[ORM\Id, ORM\GeneratedValue, ORM\Column]
18
+
private ?int $id = null;
19
+
}
20
+
```
21
+
22
+
## Мапінг
23
+
24
+
Залежить від параметра `doctrine_behaviors_blameable_user_entity`:
25
+
26
+
| Параметр | Поля `createdBy`, `updatedBy`, `deletedBy` |
27
+
| --- | --- |
28
+
| не задано (`null`) | рядкові колонки, nullable |
29
+
| клас сутності користувача | `ManyToOne` на цю сутність (колонки `createdBy_id` тощо, `ON DELETE SET NULL`) |
30
+
31
+
```yaml
32
+
# config/services.yaml
33
+
parameters:
34
+
doctrine_behaviors_blameable_user_entity: App\Entity\User
35
+
```
36
+
37
+
Поле, вже змапене в сутності, бандл не чіпає.
38
+
39
+
## Як це працює
40
+
41
+
Користувача повертає `UserProviderInterface` (див. [Налаштування](/docs/doctrine/doctrine-behaviors/config)). Якщо він `null` (немає токена, консольна команда), значення не змінюються.
42
+
43
+
| Подія | Що відбувається |
44
+
| --- | --- |
45
+
| `prePersist` | `createdBy` і `updatedBy`, якщо вони порожні |
46
+
| `preUpdate` | `updatedBy` |
47
+
| `preRemove` | `deletedBy` |
48
+
49
+
:::warning
50
+
Типовий `UserProvider` повертає об'єкт користувача з токена. Якщо параметр `doctrine_behaviors_blameable_user_entity` не задано, колонки рядкові — у такому разі або задайте параметр, або підставте провайдер, що повертає рядок (приклад `getUserIdentifier()` — у [Налаштуваннях](/docs/doctrine/doctrine-behaviors/config)).
51
+
:::
52
+
53
+
## Використання
54
+
55
+
```php
56
+
$category = new Category();
57
+
$entityManager->persist($category);
58
+
$entityManager->flush();
59
+
60
+
$category->getCreatedBy(); // App\Entity\User або рядок — залежно від мапінгу
61
+
$category->getUpdatedBy();
62
+
$category->getDeletedBy(); // null
63
+
```