-
Заменяемый класс должен быть аннотирован "@ORM\InheritanceType("SINGLE_TABLE")", его свойства и методы должны иметь область видимости "protected".
-
Если заменяемый класс фигурирует в маппинге как "targetEntity", он должен реализовывать интерфейс, соответствующий названию класса (например, "Product" - "ProductInterface").
-
Заменяющий класс должен иметь другое название (можно, например, добавить префикс "App") для корректной генерации таблицы дискриминаторов (не забудьте обновить дискриминаторы уже созданных сущностей в таблице базы данных, как правило это поле "dtype", пример значения - "AppProduct" - "appproduct").
-
FQCN заменяющего класса должен соответствовать шаблону "App\Entity{BUNDLE_NAME}{CLASS_NAMESPACE}\App{CLASS_NAME}", где:
- BUNDLE_NAME - название бандла заменяемой сущности без префикса "Darvin" и суффикса "Bundle", например, "ECommerce";
- CLASS_NAMESPACE - неймспейс класса заменяемой сущности после части "Entity", например, "Product" (может отсутствовать);
- CLASS_NAME - название класса заменяемой сущности с префиксом "App", например, "AppCatalog".
Примеры:
- "Darvin\ECommerceBundle\Entity\Product\Catalog" => "App\Entity\ECommerce\Product\AppCatalog";
- "Darvin\PageBundle\Entity\Page" => "App\Entity\Page\AppPage".
-
Если заменяемый класс является переводом, необходимо переопределить его метод "getTranslatableEntityClass()", а также метод "getTranslationEntityClass()" переводимой сущности, тем самым установив корректную связь.
-
Необходимо заменить класс в поле "object_class" таблицы "content_slug_map" базы данных.