Использование библиотеки сериализатора Symfony для использования значения в подобъекте - PullRequest
0 голосов
/ 07 марта 2019

Я использую https://jmsyst.com/libs/serializer автономно, а не с Symfony.У меня есть два класса сущностей следующим образом, где SomeProperty является подобъектом для MyEntity:

class MyEntity {
    private $id, $name, $some_property;
    public function getId() {return $this->id;}
    public function getName(){return $this->name;}
    public function getSomeProperty(){return $this->some_property;}
}

class SomeProperty {
    private some_sub_property;
    public function getSomeSubProperty(){return $this->some_sub_property;}
}

Я могу успешно выполнить сериализацию объекта по умолчанию, что приводит к следующему JSON:

{
    "id":123,
    "name":"foo",
    "some_property" : {
        "some_sub_property: "bar"
    }
}

Но вместо этого я хочу включить свойство в подобъект SomeProperty на том же уровне, что и другие свойства в MyEntity, например:

{
    "id":123,
    "name":"foo",
    "mySubproperty": "bar"
}

У меня естьпопробовал около ста вариантов XML, чтобы определить сериализацию, и все они чем-то похожи на следующие, однако они приводят к включению id и name, но не mySubproperty.

<?xml version="1.0" encoding="UTF-8" ?>
<serializer>
    <class name="NS\App\Domain\Entity\MyEntity">
        <xml-namespace prefix="atom" uri="http://www.w3.org/2005/Atom"/>
        <property name="id"/>
        <property name="name"/>
        <virtual-property
            method="getSomeProperty"
            access-type="public_method"
            accessor-getter="getSomeSubProperty"
            serialized-name="mySubproperty"
        />
    </class>
</serializer>

Какэто сделано?Спасибо

1 Ответ

1 голос
/ 08 марта 2019

Используйте аннотацию @VirtualProperty, если это поле не используется в другом месте.Если вы используете его, добавьте @Exclude на getSomeProperty() и добавьте виртуальное свойство с другим именем.

    /**
     * @Serializer\VirtualProperty()
     */
    public function getSomeProperty()
    {
        return $this->getSomeSubProperty();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...