JMSSerializerBundle自定义实体类的Yaml配置

3

我在我的symfony2项目中,有一个自定义实体(entity)位于Bundle和框架之外。

我需要将json数据设置到这个实体中,但是我无法正确配置yaml文件。

app/config/config.yml

jms_serializer:
    metadata:
        auto_detection: true
        directories:
            CORE:
                namespace_prefix: "Core\Domain\Model"
                path: "%kernel.root_dir%/Resources/serializer/CORE"

app/Resources/serializer/CORE/Model.Product.yml

Core\Domain\Model\Product\Product:
    properties:
        id:
            type: integer
        objectId:
            type: string
        name:
            type: string ...

这个bundle是否无法处理在bundles之外的实体?

我一直看到错误信息:必须为Core\Domain\Model\Product\Product::$id定义一个类型。

我认为JMSSerializerBundle不能读取yaml文件,因为使用注释可以正常工作。

有什么想法吗?

谢谢。

1个回答

4
在您的app/config/config.yml文件中,请确保使用\\作为命名空间分隔符,而不是\
jms_serializer:
    metadata:
        auto_detection: true
        directories:
            CORE:
                namespace_prefix: "Core\\Domain\\Model"
                path: "%kernel.root_dir%/Resources/serializer/CORE"

否则,反斜杠将被视为后面字母的转义字符。 编辑: 此外,请确保正确命名JMS序列化器配置。对于类Core\Domain\Model\Product\Product,您需要在指定的配置文件路径下创建一个Product.Product.yml文件。在您的示例中,文件名为Model.Product.yml
因此,要获取实体的序列化器配置文件名一般遵循以下步骤:
  1. 从配置中定义的类名中删除namespace
  2. 使用 . 替换命名空间分隔符\
  3. 追加.yml并将文件放置在配置中定义的path文件夹中

我刚刚更新了答案,因为我注意到文件命名中还有一个错误。 - Fabian Kleiser
我不确定我理解你的意思。我将Product.yml改为Product.Product.yml,结果是一样的。我还将Product.yml改为Core.Domain.Model.Product.Product.yml,结果还是一样的。我不明白发生了什么。 - bruli
2
已解决在文件Products.Products.yml中运行良好。需要清除缓存。感谢大家。 - bruli
我很高兴你解决了它。如果您能接受答案,我将不胜感激。谢谢。 - Fabian Kleiser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接