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.