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'