我对让 Sylius ProductImage 可翻译感到很生气。我需要一个 ProductImage 名称和 slug 来用于 SEO 目的。
我已经做的是:
产品图片.orm.yml
AppBundle\Entity\ProductImage:
type: entity
table: sylius_product_image
产品图片翻译.orm.yml
AppBundle\Entity\ProductImageTranslation:
type: entity
table: app_product_image_translation
id:
id:
type: integer
generator:
strategy: AUTO
fields:
name:
type: string
nullable: true
slug:
type: string
nullable: true
unique: true
配置.yml
sylius_resource:
resources:
app.product_image:
classes:
model: AppBundle\Entity\ProductImage
form: AppBundle\Form\Type\ProductImageType
translation:
classes:
model: AppBundle\Entity\ProductImageTranslation
form: AppBundle\Form\Type\ProductImageTranslationType
结果是以下错误:
An exception occurred while executing 'SELECT t1.type AS type_2, t1.path AS path_3, t1.id AS id_4, t1.owner_id AS owner_id_5 FROM sylius_product_image t1 WHERE t0.owner_id = ?' with params [22]:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 't0.owner_id' in 'where clause'
在我看来,错误的发生是因为缺少连接的翻译表。
您还需要覆盖 sylius_core 中的默认 ProductImage (http://docs.sylius.org/en/latest/customization/model.html)
config.yml:
sylius_resource:
resources:
app.product_image:
classes:
model: AppBundle\Entity\ProductImage
translation:
classes:
model: AppBundle\Entity\ProductImageTranslation
sylius_core:
resources:
product_image:
classes:
model: AppBundle\Entity\ProductImage
然后按照可翻译指南进行操作:http://docs.sylius.org/en/latest/cookbook/custom-translatable-model.html
如果您遵循所有准则,您将能够生成新实体,但您将获得以下内容:
The association AppBundle\Entity\ProductImageTranslation#translatable refers to the inverse side field AppBundle\Entity\ProductImage#translations which does not exist.
您可以通过编辑使其工作
Sylius\Bundle\CoreBundle\DependencyInjection\Configuration
并在“product_image”下添加一个“翻译”节点,这显然不是一个要做的事情......
也许 sylius 核心成员可以给我们提供线索......
这里同样的错误,经过几个小时我发现了问题。
在 sylius_resource.resources 声明中,您必须使用“sylius.product_image”而不是“app.product_image”。
之前:
sylius_resource:
resources:
app.product_image:
classes:
model: AppBundle\Entity\ProductImage
translation:
classes:
model: AppBundle\Entity\ProductImageTranslation
之后:
sylius_resource:
resources:
sylius.product_image:
classes:
model: AppBundle\Entity\ProductImage
translation:
classes:
model: AppBundle\Entity\ProductImageTranslation
sylius_core:
resources:
product_image:
classes:
model: AppBundle\Entity\ProductImage
当您使用 app.product_image 创建新资源时,您不会修改 ProductImage 原始资源,因为 $translations 属性不会自动添加到驱动程序配置中。