Я хочу по умолчанию выводить имена дел верблюда, и этот ответ обеспечивает отличное решение.
$serializer= \JMS\Serializer\SerializerBuilder::create()
->setDebug(true)
->addMetadataDir(APP_ROOT.'/config/serializer')
->setPropertyNamingStrategy(new \JMS\Serializer\Naming\IdenticalPropertyNamingStrategy())
->build();
Однако я также хочу иногда переопределять сериализованное имя при выполненииПри традиционном использовании serialized-name
сериализатор не следует инструкциям и выдает idPublic
вместо желаемого id
.Если я удаляю глобальное переопределение для использования идентичных имен свойств, id
выводится по желанию, однако, очевидно, что все остальные свойства имеют случай змеи (то есть other_property
) и должны настраиваться индивидуально, что нежелательно.
<?xml version="1.0" encoding="UTF-8" ?>
<serializer>
<class name="Fully\Qualfied\ClassName" exclusion-policy="ALL">
<property name="idPublic" serialized-name="id" expose="true"/>
<property name="name" expose="true"/>
<property name="otherProperty" expose="true"/>
</class>
</serializer>
<?xml version="1.0" encoding="utf-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping https://www.doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Fully\Qualfied\ClassName" table="systems">
<id name="id" type="integer">
<generator strategy="IDENTITY"/>
</id>
<field name="idPublic" type="integer" column="id_public"/>
<field name="name" type="string"/>
<field name="otherProperty" type="string" length="45" column="other_property"/>
</entity>
</doctrine-mapping>
В качестве альтернативного подхода я даже пытался исключить обычное свойство и использовать вместо него виртуальное свойство, но оно также привело к имени idPublic
.
<?xml version="1.0" encoding="UTF-8" ?>
<serializer>
<class name="Fully\Qualfied\ClassName" exclusion-policy="ALL">
<virtual-property method="getIdPublic" serialized-name="id" expose="true"/>
<property name="name" expose="true"/>
<property name="otherProperty" expose="true"/>
</class>
</serializer>
Как можнопереопределить глобальную конфигурацию JMS Serializer для использования идентичных имен?