3

symfony が後援するプロジェクト \Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver は、私のプロジェクトでエンティティ ファイル名をクリーンでシンプルに保つのに非常に役立ちます。ただし、JMSSerialize は、各エンティティの命名規則が完全修飾名前空間であると想定しています。これは、Doctrine2 構成で \Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver を使用する場合には当てはまりません。

( 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);

ドキュメントによると、ファイル名は短縮され、「MyProject\Entities\User」は User.orm.yml になります。

しかし、JMSSerialzer は $myDir で YAML ファイルを探しています。'/MyProject.Entities.User.yml'

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

質問: JMSSerialize が検索するメタデータ ファイル名をオーバーライドする方法はありますか? 私はすでに addMetadataDir() を使用してその場所を指定しています

注: これは Symfony2 プロジェクトではありません

4

1 に答える 1

4

の 2 番目のパラメーターを使用していますaddMetadataDirか?

から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 = '')
{
    // ...
}

2番目のパラメーターを指定すると、探しているものが実現できるようです。

于 2013-11-14T19:59:57.473 に答える