Blameable

Blameable

Зберігає, хто створив, востаннє змінив і видалив сутність.

Сутність

use Doctrine\ORM\Mapping as ORM;
use Ufo\DoctrineBehaviors\Contract\Entity\BlameableInterface;
use Ufo\DoctrineBehaviors\Model\Blameable\BlameableTrait;

#[ORM\Entity]
class Category implements BlameableInterface
{
    use BlameableTrait;

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

Мапінг

Залежить від параметра doctrine_behaviors_blameable_user_entity:

Параметр Поля createdBy, updatedBy, deletedBy
не задано (null) рядкові колонки, nullable
клас сутності користувача ManyToOne на цю сутність (колонки createdBy_id тощо, ON DELETE SET NULL)
# config/services.yaml
parameters:
    doctrine_behaviors_blameable_user_entity: App\Entity\User

Поле, вже змапене в сутності, бандл не чіпає.

Як це працює

Користувача повертає UserProviderInterface (див. Налаштування). Якщо він null (немає токена, консольна команда), значення не змінюються.

Подія Що відбувається
prePersist createdBy і updatedBy, якщо вони порожні
preUpdate updatedBy
preRemove deletedBy

Типовий UserProvider повертає об'єкт користувача з токена. Якщо параметр doctrine_behaviors_blameable_user_entity не задано, колонки рядкові — у такому разі або задайте параметр, або підставте провайдер, що повертає рядок (приклад getUserIdentifier() — у Налаштуваннях).

Використання

$category = new Category();
$entityManager->persist($category);
$entityManager->flush();

$category->getCreatedBy(); // App\Entity\User або рядок — залежно від мапінгу
$category->getUpdatedBy();
$category->getDeletedBy(); // null