Виправлені помилки Doctrine Behaviors

Виправлені помилки Doctrine Behaviors

Помилки попередніх версій і версія, з якої їх виправлено. Актуальні — на сторінці Актуальні помилки.

Typed property … must not be accessed before initialization у Blameable, Sluggable, SoftDeletable, Uuidable

Виправлено в 2.0.0

Зачеплені версії: 1.0.1 — 1.0.4.

Симптом. Error: Typed property App\Entity\X::$… must not be accessed before initialization:

  • Sluggable, Uuidable — при persist() нової сутності (generateSlug(), generateUuid());
  • Blameable — при persist() нової сутності, коли є користувач (getCreatedBy()), при remove() (getDeletedBy()), а також для завантажених сутностей із NULL у колонці;
  • SoftDeletable — isDeleted() / getDeletedAt() нової сутності.

Причина. У 1.0.1 властивості трейтів стали типізованими без значень за замовчуванням (protected string $slug;, protected UuidInterface|string|null $uuid; тощо), а методи читали їх до ініціалізації.

Виправлення. У 2.0.0 властивості отримали значення за замовчуванням (null, для slug — ''), Blameable — nullable-тип. На 1.0.x для Sluggable, Uuidable і SoftDeletable можна ініціалізувати властивості в конструкторі сутності ($this->slug = '', $this->uuid = null, $this->deletedAt = null); для Blameable — підключити BlameableMethodsTrait і оголосити createdBy / updatedBy / deletedBy самостійно з nullable-типом.


Пакет не оголошував залежність від symfony/security-bundle

Виправлено в 2.0.0

Зачеплені версії: 1.0.0 — 1.0.4.

Симптом. У застосунку без symfony/security-bundle контейнер не збирається: сервіс Ufo\DoctrineBehaviors\Provider\UserProvider не вдається автовайрити.

Причина. UserProvider залежить від Symfony\Bundle\SecurityBundle\Security, а composer.json вимагав лише symfony/security-core.

Виправлення. У 2.0.0 symfony/security-bundle додано в require. На 1.0.x — встановіть його в застосунок.


Timestampable: помилка при збереженні нової сутності

Виправлено в 1.0.3

Зачеплені версії: 1.0.1 — 1.0.2.

Симптом. persist() + flush() нової сутності з TimestampableTrait завершується Error: Typed property …::$createdAt must not be accessed before initialization.

Причина. protected DateTimeInterface $createdAt; без значення за замовчуванням, а updateTimestamps() перевіряє $this->createdAt === null.

Виправлення. Властивості ?DateTimeInterface зі значенням null (PR #1).


Translatable: недопустимий каскад merge в ORM 3

Виправлено в 1.0.2

Зачеплені версії: 1.0.0 — 1.0.1.

Симптом. Під час завантаження метаданих сутностей з TranslatableInterface / TranslationInterface Doctrine ORM 3 кидає MappingException про недопустиму опцію каскаду merge.

Причина. TranslatableEventSubscriber мапив зв'язки translations і translatable з cascade: ['persist', 'merge', …]; в ORM 3 допустимі лише persist, remove, refresh, detach.

Виправлення. Каскад merge прибрано.