标签: jms-serializer

无法使用JMS序列化程序将空数组序列化为空XML元素

我正在组装一个基于XSD的XML文件,该文件需要存在XML容器元素,即使它是空的.

当我尝试使用JMS序列化程序序列化一个空数组时,如果数组不为空,则配置可行,我根本就没有元素.

我可以通过配置来解决这个问题,还是我必须实现自己的事件处理程序?

提前致谢.

php xml xsd jms-serializer

9
推荐指数
1
解决办法
471
查看次数

9
推荐指数
1
解决办法
7480
查看次数

如何为JMS Serializer创建自定义排除策略,允许我做出是否包含特定字段的运行时决策?

正如标题所说,我正在尝试做出是否在序列化中包含字段的运行时决定.就我而言,这个决定将基于权限.

我正在使用Symfony 2,所以我要做的是添加一个名为@ExcludeIf的附加注释,它接受一个安全表达式.

我可以处理元数据的注释解析和存储,但我无法看到如何将自定义排除策略与库集成.

有什么建议?

注意:排除策略是JMS代码库中的实际构造,我只是无法找出在其他代码库之上集成额外内容的最佳方法

PS:之前我曾经问过这个问题,并指出要使用小组.由于各种原因,这对我的需求来说是一个非常差的解决方案

symfony jmsserializerbundle jms-serializer

7
推荐指数
1
解决办法
5821
查看次数

如何通过 API 平台使用继承类

我希望使用 API 平台对对象层次结构类执行 CRUD 操作。我发现在将继承类与 API 平台一起使用时编写的内容很少,在与 Symfony 的序列化器一起使用时编写的内容也很少,并且我正在寻找更好的方向来专门针对继承类需要以不同方式实现的内容。

假设我有从 Animal 继承的 Dog、Cat 和 Mouse,其中 Animal 是抽象的(见下文)。这些实体是使用 创建的bin/console make:entity,并且仅进行了修改以扩展父类(及其各自的存储库)并添加 Api-Platform 注释。

组应该如何与继承的类一起使用?每个子类(即狗、猫、老鼠)是否应该有自己的组,还是应该只animal使用父组?当对animal所有人使用该组时,某些路由会响应The total number of joined relations has exceeded the specified maximum. ...,而当混合时,有时会得到Association name expected, 'miceEaten' is not an association.。这些组是否还允许父实体上的 ApiPropertys 应用于子实体(即 Animal::weight 的默认 openapi_context 示例值为 1000)?

API-Platform 不讨论 CTI 或 STI,我在文档中找到的唯一相关参考是关于MappedSuperclass。除了 CLI 或 STI 之外,还需要使用 MappedSuperclass 吗?请注意,我尝试申请MappedSuperclassAnimal但收到了预期的错误。

根据这篇文章以及其他文章,首选的 RESTful 实现似乎是使用单个端点/animals …

rest symfony doctrine-orm jms-serializer api-platform.com

7
推荐指数
1
解决办法
4749
查看次数

是否可以使用JMS Serializer将数组序列化到对象的根目录?

想象一下,我有一个简单的对象,结构类似于下面的对象:

Object (SomeClass) {
    $someOtherData (array) [
        ...
    ]

    $data (array) [
        "key": "value",
        "key": "value",
        "key": "value",
        "key": "value"
    ]
}
Run Code Online (Sandbox Code Playgroud)

如果我使用JMS Serializer将此对象序列化为JSON,我会得到一个结构相同的结果,但是$元素位于根元素上,如下所示:

{
    "someOtherData": {
        ...
    },
    "data": {
        "key": "value",
        "key": "value",
        "key": "value",
        "key": "value"
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要将$ data变量的内容放在序列化结果的根目录上,即:

{
   "someOtherData": {
       ...
   },
   "key": "value",
   "key": "value",
   "key": "value",
   "key": "value"
}
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是这样,怎么样?

php serialization json symfony jms-serializer

6
推荐指数
1
解决办法
3674
查看次数

使用JMSSerializer序列化特征

尝试序列化使用特征的模型时,JMSSerializer不会序列化该特征包含的属性.我使用yaml来配置序列化程序,但它似乎无法正常工作.

trait IdentityTrait
{

    protected $id;

    public function setId($id)
    {
        $this->id = $id;

        return $this;
    }

    public function getId()
    {
        return $this->id;
    }
}

class OurClass {
   use IdentityTrait;

   protected $test;

   public function getTest() {
       $this->test;
   }
}
Run Code Online (Sandbox Code Playgroud)

使用JMSSerializerBundle并且以下yaml位于 Resources/config/serializer/Model.Traits.IdentityTrait.yml

MyProject\Component\Core\Model\Traits\IdentityTrait:
    exclusion_policy: NONE
    properties:
    id:
        expose: true
Run Code Online (Sandbox Code Playgroud)

OurClass配置位于Resources/config/serializer/Model.OurClass.yml

 MyProject\Component\Core\Model\OurClass:
     exclusion_policy: NONE
     properties:
         test:
             expose: true
Run Code Online (Sandbox Code Playgroud)

一些代码被忽略以专注于该问题

php symfony jmsserializerbundle jms-serializer

6
推荐指数
1
解决办法
1475
查看次数

使用jms序列化程序和ISO8601获取日期时间格式的不匹配

我收到这条消息:

Invalid datetime "2017-11-07T19:46:57.118Z", expected format Y-m-d\\TH:i:sP.
Run Code Online (Sandbox Code Playgroud)

使用JMS Serializer和配置时:

jms_serializer:
    handlers:
        datetime:
            default_format: 'Y-m-d\\TH:i:sP'
Run Code Online (Sandbox Code Playgroud)

我认为我提供的日期格式正确,但显然没有.这是日期错了吗?

doctrine iso8601 symfony jmsserializerbundle jms-serializer

6
推荐指数
1
解决办法
2274
查看次数

JMS序列化器XmlList批注

如何为@XmlList元素定义cdata和名称空间?

例如,如果我需要修改示例http://jmsyst.com/libs/serializer/master/reference/annotations#xmlnamespace中的 BlogPost 以具有多个作者:

use JMS\Serializer\Annotation as JMS;

/**
 * @JMS\XmlNamespace(uri="http://example.com/namespace")
 * @JMS\XmlNamespace(uri="http://www.w3.org/2005/Atom", prefix="atom")
 * @JMS\XmlRoot("blog-post")
 */
class BlogPost
{
    /**
     * @JMS\Type("ArrayCollection<JMS\Serializer\Tests\Fixtures\Author>")
     * @JMS\XmlList(inline = true, entry="author")
     *
     * replaced XmlElement(namespace="http://www.w3.org/2005/Atom") with XmlList
     */
    private $author;
}
Run Code Online (Sandbox Code Playgroud)

具有类似以下内容的序列化xml:

<?xml version="1.0" encoding="UTF-8"?>
<blog-post xmlns="http://example.com/namespace" xmlns:atom="http://www.w3.org/2005/Atom">
    <atom:author>
        <full_name>Foo Bar></full_name>
    </atom:author>
    <atom:author>
        <full_name>Baz Qux></full_name>
    </atom:author>
</blog>
Run Code Online (Sandbox Code Playgroud)

对于单个@ XmlElement,cdata和名称空间都可以正常工作,但是@XmlList@XmlCollection没有这样的功能。

有什么线索我应该在列表中的元素的注释处放置什么?

php xml annotations jms-serializer

5
推荐指数
0
解决办法
1020
查看次数

JMS Serializer没有序列化子类

我有JMS序列化程序的问题.当我使用组时,JMS不会序列化我的子类,但是当我不使用组时,一切都没问题.我做错了什么?

    $context = SerializationContext::create()->enableMaxDepthChecks();
    $context->setGroups(['clientapi']);

    $contextWithoutGroup = SerializationContext::create()->enableMaxDepthChecks();

    /** @var Serializer $serializer */
    $serializer = $this->container->get('jms_serializer');
    $dataClientApi = $serializer->serialize($documentBundle->getFolderDocumentsForClientApi(
        $this->getUserFromParam($params), $folder, $categories, $tags
    ), 'json', $context);

    $dataWithout = $serializer->serialize($documentBundle->getFolderDocumentsForClientApi(
        $this->getUserFromParam($params), $folder, $categories, $tags
    ), 'json', $$contextWithoutGroup);
Run Code Online (Sandbox Code Playgroud)

给:

$dataClientApi = '{"0":{"author":{}}}';
$dataWithout = '{"0":{"author":{id: 2}}}';
Run Code Online (Sandbox Code Playgroud)

那是我的课程.家长:

/**
 * Document
 *
 * @ORM\Table(name="documents")
 * @ORM\Entity(repositoryClass="AppBundle\Entity\DocumentRepository")
 * @ORM\EntityListeners({"DocumentListener"})
 * @JMS\ExclusionPolicy("all")
 * @JMS\AccessorOrder("custom", custom = {"id", "folderId", "title"})
 */
class Document implements ResourceInterface
{

    use Traits\SortableTrait;
    use Traits\TimestampableTrait;

    /**
     * @var integer
     *
     * …
Run Code Online (Sandbox Code Playgroud)

php symfony jmsserializerbundle jms-serializer symfony-2.8

5
推荐指数
1
解决办法
1388
查看次数

Symfony 序列化器虚拟属性,如 JMS Expression Prop

我目前正在参与一个在 API 中使用 JMS Serializer 的项目。我们使用了很多虚拟属性——尤其是序列化映射中的表达式 Prop。

App\Entity\MyEntity:
exclusion_policy: none
properties:
    id:
        expose: true
        groups: ['default']
virtual_properties:
    child:
        exp: object.getChildObject().getIdentifier()
        serialized_name: child_identifier
        type: string
        groups: ['default']
    amount:
        exp: object.getOtherChild().getAmount()
        serialized_name: other_child_amount
        type: string
        groups: ['default']
Run Code Online (Sandbox Code Playgroud)

这将允许我拥有子属性,而不必为更简洁的 JSON 创建 getter - 对于这些虚拟属性中有一些逻辑的情况非常有用(例如:以下示例中的“金额”)

{
    "id": 123,
    "child": "Identifier_52",
    "amount": 100
}
// instead of
{
     "id": 123,
     "child": { "identifier" : "Identifier_52" }
     "amount": { "weight": 20, "number": 5 } 
 } 
Run Code Online (Sandbox Code Playgroud)

我们最近考虑切换到Symfony Serializer,到目前为止我还没有找到一种简单的方法来重用或重新实现这些配置(表达式。如果我将属性 …

php serialization symfony jmsserializerbundle jms-serializer

5
推荐指数
0
解决办法
1391
查看次数