Jak*_*e N 7 serialization yaml symfony jmsserializerbundle
我的配置是
jms_serializer:
metadata:
auto_detection: true
directories:
NameOfBundle:
namespace_prefix: ""
path: "@VendorNameOfBundle/Resources/config/serializer"
Run Code Online (Sandbox Code Playgroud)
我的YML文件名为Entity.Project.ymlcontains
Vendor\NameOfBundle\Entity\Project:
exclusion_policy: ALL
properties:
id:
expose: true
Run Code Online (Sandbox Code Playgroud)
我正在从Controller中加载序列化器
$serializer = SerializerBuilder::create()
->configureListeners(function(EventDispatcher $dispatcher) {
$dispatcher->addSubscriber(new ProjectSubscriber($this->container));
})
->addDefaultListeners()
->build();
Run Code Online (Sandbox Code Playgroud)
这完全忽略了我的YML文件并公开了Project中的所有字段.我已经清除了缓存.
但是如果我在没有自定义订阅者的情况下使用它,那么排除工作就可以了
$serializer = $this->get("jms_serializer");
Run Code Online (Sandbox Code Playgroud)
即使明确添加目录也不起作用
$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();
Run Code Online (Sandbox Code Playgroud)
关于如何定义这条路径的文档并不清楚.上面的方法没有错误,但没有拉入YML文件.以下方法错误并说该目录不存在;
$serializer = SerializerBuilder::create()
->configureListeners(function(EventDispatcher $dispatcher) {
$dispatcher->addSubscriber(new ProjectSubscriber($this->container));
})
->addDefaultListeners()
->addMetadataDir('@VendorNameOfBundle/Resources/config/serializer')
->build();
Run Code Online (Sandbox Code Playgroud)
如何让JMS Serializer查看我的YML文件以排除字段并使用订阅服务器?
这很有帮助使用 JMSSerialize 序列化遵循 SimplifiedYamlDriver 约定的 Doctrine2 实体
如果不指定命名空间,文件名似乎需要完全不同。我从来没有想过指定一个命名空间,因为主文档中没有提到这一点。
如果没有命名空间,那么addMetaDir使用就可以,但您还需要确保您的文件名如下所示
Vendor.NameOfBundle.Entity.Project.yml
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4434 次 |
| 最近记录: |