← Актуальні помилки Doctrine Behaviors
docs: Doctrine section with Doctrine Behaviors and Doctrine Helper (uk + en)
uk/docs/doctrine/doctrine-behaviors/known_issues/open.md
новий файл +17
−0
Актуальні помилки Doctrine Behaviors
Відомі помилки й обмеження поточної версії ufo-tech/doctrine-behaviors (2.0.0): симптом, причина й обхідний шлях. Виправлені — на сторінці Виправлені помилки.
<include>(.issues/default-connection-only.md)
<include>(.issues/tree-root-nodes.md)
<include>(.issues/translation-locale-length.md)
<include>(.issues/readme-outdated.md)
uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/default-connection-only.md
новий файл +24
−0
Поведінки працюють лише для з'єднання default
Зачеплені версії: 1.0.0 — 2.0.0 (поточна).
Симптом. У застосунку з кількома з'єднаннями Doctrine сутності менеджера, що працює через інше з'єднання, не отримують колонок поведінок і не заповнюються (createdAt, slug, translations тощо).
Причина. Усі слухачі в src/EventSubscriber/ зареєстровані атрибутом #[AsDoctrineListener(..., connection: 'default')], тож DoctrineBundle підключає їх лише до менеджера подій з'єднання default.
Обхідний шлях. Зареєструйте потрібні слухачі для свого з'єднання тегом doctrine.event_listener з autoconfigure: false (щоб атрибут не підключив копію ще й до default), напр.:
services:
app.timestampable_reporting:
class: Ufo\DoctrineBehaviors\EventSubscriber\TimestampableEventSubscriber
autoconfigure: false
arguments:
$timestampableDateFieldType: '%doctrine_behaviors_timestampable_date_field_type%'
tags:
- { name: doctrine.event_listener, event: loadClassMetadata, connection: reporting, priority: 500 }
BlameableEventSubscriber і SluggableEventSubscriber (через DefaultSluggableRepository) отримують EntityManagerInterface у конструкторі — для них також передайте менеджер свого з'єднання (@doctrine.orm.reporting_entity_manager). Решта слухачів бере менеджер з аргументів події.
uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/tree-root-nodes.md
новий файл +11
−0
getRootNodes() не знаходить вузли, зроблені коренем через setChildNodeOf(null)
Зачеплені версії: 1.0.0 — 2.0.0 (поточна). Успадковано з KnpLabs/DoctrineBehaviors.
Симптом. Вузол, для якого викликали setChildNodeOf(null), isRootNode() вважає коренем, але TreeTrait::getRootNodes() його не повертає.
Причина. Новий вузол має materializedPath = '', а setChildNodeOf(null) записує '/'. getRootNodesQB() фільтрує лише materializedPath = ''.
Обхідний шлях. Не викликайте setChildNodeOf(null) для коренів або вибирайте корені власним запитом: ->andWhere("t.materializedPath IN ('', '/')").
uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/translation-locale-length.md
новий файл +30
−0
Колонка locale перекладу має довжину 5
Зачеплені версії: 1.0.0 — 2.0.0 (поточна). Успадковано з KnpLabs/DoctrineBehaviors.
Симптом. Переклад із локаллю довшою за 5 символів (sr_Latn, zh_Hant, de_CH_1996) не зберігається на СУБД, що перевіряють довжину рядка (MySQL у strict mode, PostgreSQL), — помилка «value too long» / «Data too long».
Причина. TranslatableEventSubscriber::mapTranslation() мапить locale як string з length: 5.
Обхідний шлях. Бандл не мапить locale, якщо поле вже змаплене. Підключіть у сутності перекладу TranslationMethodsTrait замість TranslationTrait і оголосіть властивості самі:
use Ufo\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
use Ufo\DoctrineBehaviors\Contract\Entity\TranslationInterface;
use Ufo\DoctrineBehaviors\Model\Translatable\TranslationMethodsTrait;
#[ORM\Entity]
class CategoryTranslation implements TranslationInterface
{
use TranslationMethodsTrait;
#[ORM\Column(length: 16)]
protected ?string $locale = null;
protected ?TranslatableInterface $translatable = null;
// ...
}
uk/docs/doctrine/doctrine-behaviors/known_issues/.issues/readme-outdated.md
новий файл +12
−0
README і docs/ пакета застаріли
Зачеплені версії: 2.0.0 (поточна). Нестиковка документації, на роботу не впливає.
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.- У переліку поведінок README немає Sluggable і Loggable; Blameable описано як
createdBy/updatedByбезdeletedBy; Uuid — як «UUID як первинний ключ», хочаuuid— окрема колонка. - Розділ «Usage» посилається на документацію KnpLabs;
CHANGELOG.mdзакінчується на 1.0.0. - Приклади в
docs/*.mdздебільшого на анотаціях@ORM\Entity, яких немає в Doctrine ORM 3;translatable.mdпосилається на неіснуючийgithub.com/Ufo/DoctrineBehaviors;tree.mdне згадує, що для$root[0]потрібенArrayAccess, аgetTree()— зTreeTraitу репозиторії.
Актуальний опис — на цьому сайті.