symfony 序列化程序 jmsserializerbundle 服务名称冲突
symfony serializer jmsserializerbundle service name conflict
我有以下问题:我正在开发一个依赖于 jmsserializerbundle (1.1) 的 symfony (2.8) 项目。
当启用 symfony-serializer 和 jms-serializer 包时,
# app/config/config.yml
framework:
# ...
serializer: { enabled: true }
jms_serializer:
metadata:
#...
在调用 $this->get('serializer')
或 $this->get('jms_serializer')
时,我只得到了 jms-serializer。此问题似乎已在 jmsserializerbundle 2.0 版中得到解决:https://github.com/schmittjoh/JMSSerializerBundle/issues/558
有没有办法在不将 jmsserializerbundle 更新到 2.0 的情况下解决这个问题?
在自定义服务中包装 symfony-serializer 时,与正常的 symfony-serializer 配置相比,性能会有什么不同吗?像这样:
<?php
use SomeCustomNormalizer;
use Symfony\Component\Serializer\Encoder\JsonEncode;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;
class SerializerService implements SerializerInterface
{
private $serializer;
public function __construct()
{
$this->serializer = new Serializer(
[new SomeCustomNormalizer(), new ObjectNormalizer()],
[new JsonEncode()]
);
}
public function serialize($data, $format, array $context = array())
{
# serialize
}
public function deserialize($data, $type, $format, array $context = array())
{
# deserialize
}
}
# SomeBundle/Resources/config/services.yml
serializer_service:
class: SomeBundle\SerializerService
我遇到了有关性能的问题,因为现有的 jms 配置在应用程序内核中注册了 jmsserializerbundle,而我的自定义服务并非如此,它刚刚在 services.yml
中设置。
提前致谢
解决方案
如下所述,我只需要在 jms-config 中添加一行:
# app/config/config.yml
jms_serializer:
enable_short_alias: false
metadata:
#...
Is there any way to solve this without updating jmsserializerbundle to 2.0?
JMS 序列化程序提供选项:
jms_serializer:
enable_short_alias: false
Would there be any difference in performance compared to the normal symfony-serializer configuration when wrapping a Symfony-serializer in a custom service? like so:
我猜不是,Symfony 序列化器只是 'another' 由 FrameworkBundle 定义的服务,它是序列化器 class 的包装器,注入了规范化器和编码器。
如果您创建自己的服务(如您的示例),它也将由服务容器编译。您可以在此处查看定义:https://github.com/symfony/symfony/blob/v2.8.52/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml
我有以下问题:我正在开发一个依赖于 jmsserializerbundle (1.1) 的 symfony (2.8) 项目。 当启用 symfony-serializer 和 jms-serializer 包时,
# app/config/config.yml
framework:
# ...
serializer: { enabled: true }
jms_serializer:
metadata:
#...
在调用 $this->get('serializer')
或 $this->get('jms_serializer')
时,我只得到了 jms-serializer。此问题似乎已在 jmsserializerbundle 2.0 版中得到解决:https://github.com/schmittjoh/JMSSerializerBundle/issues/558
有没有办法在不将 jmsserializerbundle 更新到 2.0 的情况下解决这个问题?
在自定义服务中包装 symfony-serializer 时,与正常的 symfony-serializer 配置相比,性能会有什么不同吗?像这样:
<?php
use SomeCustomNormalizer;
use Symfony\Component\Serializer\Encoder\JsonEncode;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\SerializerInterface;
class SerializerService implements SerializerInterface
{
private $serializer;
public function __construct()
{
$this->serializer = new Serializer(
[new SomeCustomNormalizer(), new ObjectNormalizer()],
[new JsonEncode()]
);
}
public function serialize($data, $format, array $context = array())
{
# serialize
}
public function deserialize($data, $type, $format, array $context = array())
{
# deserialize
}
}
# SomeBundle/Resources/config/services.yml
serializer_service:
class: SomeBundle\SerializerService
我遇到了有关性能的问题,因为现有的 jms 配置在应用程序内核中注册了 jmsserializerbundle,而我的自定义服务并非如此,它刚刚在 services.yml
中设置。
提前致谢
解决方案
如下所述,我只需要在 jms-config 中添加一行:
# app/config/config.yml
jms_serializer:
enable_short_alias: false
metadata:
#...
Is there any way to solve this without updating jmsserializerbundle to 2.0?
JMS 序列化程序提供选项:
jms_serializer:
enable_short_alias: false
Would there be any difference in performance compared to the normal symfony-serializer configuration when wrapping a Symfony-serializer in a custom service? like so:
我猜不是,Symfony 序列化器只是 'another' 由 FrameworkBundle 定义的服务,它是序列化器 class 的包装器,注入了规范化器和编码器。
如果您创建自己的服务(如您的示例),它也将由服务容器编译。您可以在此处查看定义:https://github.com/symfony/symfony/blob/v2.8.52/src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.xml