Актуальні помилки Doctrine Behaviors

← Актуальні помилки Doctrine Behaviors

Ashterix

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

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

1 + # Актуальні помилки Doctrine Behaviors
2 +
3 + Відомі помилки й обмеження поточної версії `ufo-tech/doctrine-behaviors` (2.0.0): симптом, причина й обхідний шлях. Виправлені — на сторінці [Виправлені помилки](/docs/doctrine/doctrine-behaviors/known_issues/fixed).
4 +
5 + <include>(.issues/default-connection-only.md)
6 +
7 + ---
8 +
9 + <include>(.issues/tree-root-nodes.md)
10 +
11 + ---
12 +
13 + <include>(.issues/translation-locale-length.md)
14 +
15 + ---
16 +
17 + <include>(.issues/readme-outdated.md)

uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/default-connection-only.md новий файл +24 −0

1 + ### Поведінки працюють лише для з'єднання `default`
2 +
3 + :::warning subtitle="Актуальна"
4 + Зачеплені версії: 1.0.0 — 2.0.0 (поточна).
5 + :::
6 +
7 + **Симптом.** У застосунку з кількома з'єднаннями Doctrine сутності менеджера, що працює через інше з'єднання, не отримують колонок поведінок і не заповнюються (`createdAt`, `slug`, `translations` тощо).
8 +
9 + **Причина.** Усі слухачі в `src/EventSubscriber/` зареєстровані атрибутом `#[AsDoctrineListener(..., connection: 'default')]`, тож DoctrineBundle підключає їх лише до менеджера подій з'єднання `default`.
10 +
11 + **Обхідний шлях.** Зареєструйте потрібні слухачі для свого з'єднання тегом `doctrine.event_listener` з `autoconfigure: false` (щоб атрибут не підключив копію ще й до `default`), напр.:
12 +
13 + ```yaml
14 + services:
15 + app.timestampable_reporting:
16 + class: Ufo\DoctrineBehaviors\EventSubscriber\TimestampableEventSubscriber
17 + autoconfigure: false
18 + arguments:
19 + $timestampableDateFieldType: '%doctrine_behaviors_timestampable_date_field_type%'
20 + tags:
21 + - { name: doctrine.event_listener, event: loadClassMetadata, connection: reporting, priority: 500 }
22 + ```
23 +
24 + `BlameableEventSubscriber` і `SluggableEventSubscriber` (через `DefaultSluggableRepository`) отримують `EntityManagerInterface` у конструкторі — для них також передайте менеджер свого з'єднання (`@doctrine.orm.reporting_entity_manager`). Решта слухачів бере менеджер з аргументів події.

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

1 + ### `getRootNodes()` не знаходить вузли, зроблені коренем через `setChildNodeOf(null)`
2 +
3 + :::warning subtitle="Актуальна"
4 + Зачеплені версії: 1.0.0 — 2.0.0 (поточна). Успадковано з KnpLabs/DoctrineBehaviors.
5 + :::
6 +
7 + **Симптом.** Вузол, для якого викликали `setChildNodeOf(null)`, `isRootNode()` вважає коренем, але `TreeTrait::getRootNodes()` його не повертає.
8 +
9 + **Причина.** Новий вузол має `materializedPath = ''`, а `setChildNodeOf(null)` записує `'/'`. `getRootNodesQB()` фільтрує лише `materializedPath = ''`.
10 +
11 + **Обхідний шлях.** Не викликайте `setChildNodeOf(null)` для коренів або вибирайте корені власним запитом: `->andWhere("t.materializedPath IN ('', '/')")`.

uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/translation-locale-length.md новий файл +30 −0

1 + ### Колонка `locale` перекладу має довжину 5
2 +
3 + :::warning subtitle="Актуальна"
4 + Зачеплені версії: 1.0.0 — 2.0.0 (поточна). Успадковано з KnpLabs/DoctrineBehaviors.
5 + :::
6 +
7 + **Симптом.** Переклад із локаллю довшою за 5 символів (`sr_Latn`, `zh_Hant`, `de_CH_1996`) не зберігається на СУБД, що перевіряють довжину рядка (MySQL у strict mode, PostgreSQL), — помилка «value too long» / «Data too long».
8 +
9 + **Причина.** `TranslatableEventSubscriber::mapTranslation()` мапить `locale` як `string` з `length: 5`.
10 +
11 + **Обхідний шлях.** Бандл не мапить `locale`, якщо поле вже змаплене. Підключіть у сутності перекладу `TranslationMethodsTrait` замість `TranslationTrait` і оголосіть властивості самі:
12 +
13 + ```php
14 + use Ufo\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
15 + use Ufo\DoctrineBehaviors\Contract\Entity\TranslationInterface;
16 + use Ufo\DoctrineBehaviors\Model\Translatable\TranslationMethodsTrait;
17 +
18 + #[ORM\Entity]
19 + class CategoryTranslation implements TranslationInterface
20 + {
21 + use TranslationMethodsTrait;
22 +
23 + #[ORM\Column(length: 16)]
24 + protected ?string $locale = null;
25 +
26 + protected ?TranslatableInterface $translatable = null;
27 +
28 + // ...
29 + }
30 + ```

uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/readme-outdated.md новий файл +12 −0

1 + ### README і docs/ пакета застаріли
2 +
3 + :::warning subtitle="Актуальна"
4 + Зачеплені версії: 2.0.0 (поточна). Нестиковка документації, на роботу не впливає.
5 + :::
6 +
7 + * `README.md` указує PHP >= 8.2, DBAL ^3.2 | ^4.2, ORM ^3.3, DoctrineBundle ^2.6 — у 2.0.0 це PHP >= 8.4, DBAL ^4.2, ORM ^3.7, DoctrineBundle ^3.0.
8 + * У переліку поведінок README немає Sluggable і Loggable; Blameable описано як `createdBy` / `updatedBy` без `deletedBy`; Uuid — як «UUID як первинний ключ», хоча `uuid` — окрема колонка.
9 + * Розділ «Usage» посилається на документацію KnpLabs; `CHANGELOG.md` закінчується на 1.0.0.
10 + * Приклади в `docs/*.md` здебільшого на анотаціях `@ORM\Entity`, яких немає в Doctrine ORM 3; `translatable.md` посилається на неіснуючий `github.com/Ufo/DoctrineBehaviors`; `tree.md` не згадує, що для `$root[0]` потрібен `ArrayAccess`, а `getTree()` — з `TreeTrait` у репозиторії.
11 +
12 + Актуальний опис — на цьому сайті.