serialize normalizer deserialize cache orm doctrine2 doctrine jmsserializerbundle

normalizer - symfony jms serializer bundle



Uso de JMSSerialize para serializar las entidades de Doctrine2 que siguen la convención de SimplifiedYamlDriver (1)

El proyecto patrocinado por Symfony / Doctrine / ORM / Mapping / Driver / SimplifiedYamlDriver es realmente útil en mi proyecto para mantener los nombres de los archivos Entity limpios y simples. Sin embargo, JMSSerialize supone que la convención de nomenclatura para cada entidad es el espacio de nombres totalmente calificado. Esto no es cierto cuando se utiliza / Doctrine / ORM / Mapping / Driver / SimplifiedYamlDriver en su configuración de Doctrine2.

( http://docs.doctrine-project.org/en/latest/reference/yaml-mapping.html )

<?php $namespaces = array( ''/path/to/files1'' => ''MyProject/Entities'', ''/path/to/files2'' => ''OtherProject/Entities'' ); $driver = new /Doctrine/ORM/Mapping/Driver/SimplifiedYamlDriver($namespaces);

De acuerdo con los documentos: los nombres de archivo se acortan, "MyProject / Entities / User" se convertirá en User.orm.yml

Pero JMSSerialzer está buscando los archivos YAML en $ myDir. ''/MyProject.Entities.User.yml''

(ver: http://jmsyst.com/libs/serializer/master/configuration#configuring-metadata-locations )

Pregunta: ¿Hay alguna manera de anular el nombre de archivo de metadatos que busca JMSSerialize? Ya estoy usando addMetadataDir () para especificar su ubicación

Nota: este no es un proyecto de Symfony2


¿Estás usando el segundo parámetro de addMetadataDir ?

De JMS/Serializer/SerializerBuilder.php :

/** * Adds a directory where the serializer will look for class metadata. * * The namespace prefix will make the names of the actual metadata files a bit shorter. For example, let''s assume * that you have a directory where you only store metadata files for the ``MyApplication/Entity`` namespace. * * If you use an empty prefix, your metadata files would need to look like: * * ``my-dir/MyApplication.Entity.SomeObject.yml`` * ``my-dir/MyApplication.Entity.OtherObject.xml`` * * If you use ``MyApplication/Entity`` as prefix, your metadata files would need to look like: * * ``my-dir/SomeObject.yml`` * ``my-dir/OtherObject.yml`` * * Please keep in mind that you currently may only have one directory per namespace prefix. * * @param string $dir The directory where metadata files are located. * @param string $namespacePrefix An optional prefix if you only store metadata for specific namespaces in this directory. * * @return SerializerBuilder * * @throws InvalidArgumentException When a directory does not exist * @throws InvalidArgumentException When a directory has already been registered */ public function addMetadataDir($dir, $namespacePrefix = '''') { // ... }

Parece que si especifica el segundo parámetro, puede lograr lo que está buscando.