我的配置是
jms_serializer:
metadata:
auto_detection: true
directories:
NameOfBundle:
namespace_prefix: ""
path: "@VendorNameOfBundle/Resources/config/serializer"
我的名为Entity.Project.yml
的YML文件包含
Vendor\NameOfBundle\Entity\Project:
exclusion_policy: ALL
properties:
id:
expose: true
我正在从Controller中加载序列化器
$serializer = SerializerBuilder::create()
->configureListeners(function(EventDispatcher $dispatcher) {
$dispatcher->addSubscriber(new ProjectSubscriber($this->container));
})
->addDefaultListeners()
->build();
这完全忽略了我的YML文件并公开了Project中的所有字段。我已经清除了缓存。
但如果我在没有自定义订阅者的情况下使用它,那么排除工作
$serializer = $this->get("jms_serializer");
即使明确添加目录也不起作用
$serializer = SerializerBuilder::create()
->configureListeners(function(EventDispatcher $dispatcher) {
$dispatcher->addSubscriber(new ProjectSubscriber($this->container));
})
->addDefaultListeners()
->addMetadataDir(realpath($this->get('kernel')->getRootDir()."/../") . '/src/Vendor/NameOfBundle/Resources/config/serializer')
->build();
文档不清楚如何定义此路径。上面的方法没有错误,但没有拉入YML文件。以下方法错误并说该目录不存在;
$serializer = SerializerBuilder::create()
->configureListeners(function(EventDispatcher $dispatcher) {
$dispatcher->addSubscriber(new ProjectSubscriber($this->container));
})
->addDefaultListeners()
->addMetadataDir('@VendorNameOfBundle/Resources/config/serializer')
->build();
如何让JMS Serializer查看我的YML文件以排除字段并使用订阅者?
答案 0 :(得分:2)
我从documentation看到你需要设置你的Yaml文件:
有必要配置这些文件所在的元数据目录:
$serializer =
JMS\Serializer\SerializerBuilder::create()
->addMetadataDir($someDir)
->build();
有关详细信息,请参阅手册。
答案 1 :(得分:0)
这很有用Using JMSSerialize to serialize Doctrine2 Entities that follow SimplifiedYamlDriver convention
如果您没有指定命名空间,那么文件名似乎必须完全不同。我从未想过要指定命名空间,因为主文档中没有提到它。
如果没有命名空间,则addMetaDir
用法没问题,但您还需要确保文件名看起来像这样
Vendor.NameOfBundle.Entity.Project.yml