JMSSerializer 结束行标志

JMSSerializer end line sign

我想在 symfony 中序列化实体。 配置 config/packages/jms_serializer.yaml

jms_serializer:
    visitors:
        xml:
            format_output: '%kernel.debug%'
#    metadata:
#        auto_detection: false
#        directories:
#            any-name:
#                namespace_prefix: "My\FooBundle"
#                path: "@MyFooBundle/Resources/config/serializer"
#            another-name:
#                namespace_prefix: "My\BarBundle"
#                path: "@MyBarBundle/Resources/config/serializer"

    default_context:
        serialization:
            serialize_null: true
            version: ~
            enable_max_depth_checks: true
        deserialization:
            serialize_null: true
            version: ~
            enable_max_depth_checks: true

现在在控制器中 src/Controller/TempController.php

/**
* @Route("/tools/amm/{amm}", name="_amm")
*/
public function ammTestAction(AccessModule $amm, SerializerInterface $serializer){

$data = $serializer->serialize($amm, 'json');
dump($data);
print_r($data);

    return $this->render('base.html.twig', ['data' => $data]);
}

这只是测试获取和序列化数据。目标是将序列化数据保存在数据库中。 在调试数据中,我有奇怪的 '\n' 字符,当我将其保存在数据库中时,它也会被插入。

分析器调试

"""
{\n
    "id": 3,\n
    "name": "Boss",\n
    "children": [\n
        {\n
            "id": 4,\n
            "name": "Technican Supervisor",\n
            "children": [],\n
            "parent": null,\n
            "routes": []\n
        },\n
        {\n
            "id": 5,\n
            "name": "Office Supervisor",\n
            "children": [],\n
            "parent": null,\n
            "routes": []\n
        },\n
        {\n
            "id": 6,\n
            "name": "Storage Supervisor",\n
            "children": [],\n
            "parent": null,\n
            "routes": []\n
        }\n
    ],\n
    "parent": {\n
        "id": 2,\n
        "name": "Administrator",\n
        "children": [\n
            null\n
        ],\n
        "parent": {\n
            "id": 1,\n
            "name": "System Administrator",\n
            "children": [],\n
            "parent": null,\n
            "routes": []\n
        },\n
        "routes": [\n
            null,\n
            null\n
        ]\n
    },\n
    "routes": [\n
        {\n
            "id": 5,\n
            "route": "api_admin_access_access_routes",\n
            "name": "api_admin_access_access_routes",\n
            "path": "/api/admin/access/routes",\n
            "access_modules": []\n
        }\n
    ]\n
}
"""

问题

我应该如何配置 jms_serializer 以防止插入行尾符号?

如果您使用 Composer Flex 来安装 JMS_Serializer,该配方会为开发环境设置一个配置,其中包含 JSON_PRETTY_PRINT。

因此,您必须编辑 config/packages/dev/jms_serializer.yaml 并删除 JSON_PRETTY_PRINT

您的文件应如下所示:

jms_serializer:
    visitors:
        json:
            options:
                - JSON_UNESCAPED_SLASHES
                - JSON_PRESERVE_ZERO_FRACTION

在使用 FOS_Elastica & JMS_Serializer

时也很有用