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

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

Ashterix

docs: Doctrine section with Doctrine Behaviors and Doctrine Helper (uk + en)

uk/docs/doctrine/doctrine-behaviors/known_issues/fixed.md новий файл +17 −0

1 + # Виправлені помилки Doctrine Behaviors
2 +
3 + Помилки попередніх версій і версія, з якої їх виправлено. Актуальні — на сторінці [Актуальні помилки](/docs/doctrine/doctrine-behaviors/known_issues/open).
4 +
5 + <include>(.issues/typed-properties-uninitialized.md)
6 +
7 + ---
8 +
9 + <include>(.issues/security-bundle-undeclared.md)
10 +
11 + ---
12 +
13 + <include>(.issues/timestampable-uninitialized.md)
14 +
15 + ---
16 +
17 + <include>(.issues/translatable-merge-cascade.md)

uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/typed-properties-uninitialized.md новий файл +15 −0

1 + ### `Typed property … must not be accessed before initialization` у Blameable, Sluggable, SoftDeletable, Uuidable
2 +
3 + :::success subtitle="Виправлено в 2.0.0"
4 + Зачеплені версії: 1.0.1 — 1.0.4.
5 + :::
6 +
7 + **Симптом.** `Error: Typed property App\Entity\X::$… must not be accessed before initialization`:
8 +
9 + * Sluggable, Uuidable — при `persist()` нової сутності (`generateSlug()`, `generateUuid()`);
10 + * Blameable — при `persist()` нової сутності, коли є користувач (`getCreatedBy()`), при `remove()` (`getDeletedBy()`), а також для завантажених сутностей із `NULL` у колонці;
11 + * SoftDeletable — `isDeleted()` / `getDeletedAt()` нової сутності.
12 +
13 + **Причина.** У 1.0.1 властивості трейтів стали типізованими без значень за замовчуванням (`protected string $slug;`, `protected UuidInterface|string|null $uuid;` тощо), а методи читали їх до ініціалізації.
14 +
15 + **Виправлення.** У 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-типом.

uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/security-bundle-undeclared.md новий файл +11 −0

1 + ### Пакет не оголошував залежність від `symfony/security-bundle`
2 +
3 + :::success subtitle="Виправлено в 2.0.0"
4 + Зачеплені версії: 1.0.0 — 1.0.4.
5 + :::
6 +
7 + **Симптом.** У застосунку без `symfony/security-bundle` контейнер не збирається: сервіс `Ufo\DoctrineBehaviors\Provider\UserProvider` не вдається автовайрити.
8 +
9 + **Причина.** `UserProvider` залежить від `Symfony\Bundle\SecurityBundle\Security`, а `composer.json` вимагав лише `symfony/security-core`.
10 +
11 + **Виправлення.** У 2.0.0 `symfony/security-bundle` додано в `require`. На 1.0.x — встановіть його в застосунок.

uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/timestampable-uninitialized.md новий файл +11 −0

1 + ### Timestampable: помилка при збереженні нової сутності
2 +
3 + :::success subtitle="Виправлено в 1.0.3"
4 + Зачеплені версії: 1.0.1 — 1.0.2.
5 + :::
6 +
7 + **Симптом.** `persist()` + `flush()` нової сутності з `TimestampableTrait` завершується `Error: Typed property …::$createdAt must not be accessed before initialization`.
8 +
9 + **Причина.** `protected DateTimeInterface $createdAt;` без значення за замовчуванням, а `updateTimestamps()` перевіряє `$this->createdAt === null`.
10 +
11 + **Виправлення.** Властивості `?DateTimeInterface` зі значенням `null` ([PR #1](https://github.com/UFO-Tech/DoctrineBehaviors/pull/1)).

uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/translatable-merge-cascade.md новий файл +11 −0

1 + ### Translatable: недопустимий каскад `merge` в ORM 3
2 +
3 + :::success subtitle="Виправлено в 1.0.2"
4 + Зачеплені версії: 1.0.0 — 1.0.1.
5 + :::
6 +
7 + **Симптом.** Під час завантаження метаданих сутностей з `TranslatableInterface` / `TranslationInterface` Doctrine ORM 3 кидає `MappingException` про недопустиму опцію каскаду `merge`.
8 +
9 + **Причина.** `TranslatableEventSubscriber` мапив зв'язки `translations` і `translatable` з `cascade: ['persist', 'merge', …]`; в ORM 3 допустимі лише `persist`, `remove`, `refresh`, `detach`.
10 +
11 + **Виправлення.** Каскад `merge` прибрано.