【问题标题】:JMSSerializerBundle Yaml config for custom entity class用于自定义实体类的 JMSSerializerBundle Yaml 配置
【发布时间】:2015-06-23 09:24:50
【问题描述】:

我的 symfony2 项目中有一个 Bundles 和框架之外的自定义实体。

我需要将 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 ...

这个捆绑包可能无法与捆绑包之外的实体一起正常工作?

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

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

有什么想法吗?

谢谢。

【问题讨论】:

    标签: symfony jmsserializerbundle


    【解决方案1】:

    在您的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 类,您需要在配置的指定path 内有一个Product.Product.yml 文件。在您的示例中,您的文件名为 Model.Product.yml

    所以要获取一个实体的序列化配置文件名:

    1. 从类名中去掉配置中定义的namespace
    2. 将命名空间分隔符\ 替换为.
    3. 追加.yml并将文件放在配置中定义的path文件夹中

    【讨论】:

    • 我刚刚更新了答案,因为我注意到文件命名中还有一个错误。
    • 我不确定你是否理解。我把 Product.yml 改成了 Product.Product.yml,结果是一样的。我也用 Core.Domain.Model.Product.Product.yml 更改了 Product.yml,结果是一样的。我不明白会发生什么。
    • [已解决] 适用于文件 Products.Products.yml 需要清除缓存。谢谢大家。
    • 很高兴你解决了这个问题。如果您accept the answer,我将不胜感激。谢谢。
    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    相关资源
    最近更新 更多