使 Sylius 产品图像可翻译

问题描述 投票:0回答:2

我对让 Sylius ProductImage 可翻译感到很生气。我需要一个 ProductImage 名称和 slug 来用于 SEO 目的。

我已经做的是:

  • 通过参数覆盖 ProductIamge:sylius.model.product_image.class
  • 添加了 TranslatableInterface 和所需的功能
  • 添加了 ProductImageTranslation 实体
  • 添加了 ProductImage.orm.yml 和 ProductImageTranslation.orm.yml 的映射文件
  • 扩展config.yml

产品图片.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'

在我看来,错误的发生是因为缺少连接的翻译表。

php symfony doctrine sylius
2个回答
1
投票

您还需要覆盖 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 核心成员可以给我们提供线索......


0
投票

这里同样的错误,经过几个小时我发现了问题。

在 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 属性不会自动添加到驱动程序配置中。

© www.soinside.com 2019 - 2024. All rights reserved.