1

我目前正在通过使用捆绑实现的默认注入服务来使用 Symfony 序列化器。我可以将这个序列化程序配置为从特定目录加载 YAML 映射,一切都很好。

现在我还想使用 Symfony Serializer 将消息编码到 Messenger Transport。我在传输配置中启用了 symfony 序列化程序,但它不包括为序列化程序配置的映射。

async: 
   dsn: 'doctrine://default'
   serializer: messenger.transport.symfony_serializer

我知道可以在 messenger 配置中设置一些 symfony 序列化程序特定的配置,但我不知道映射是否可以通过这种方式指定,我尝试了这个,但它没有用:

serializer:
            symfony_serializer:
                format: json
                context: 
                    groups: 'list'
                    mapping:
                        paths: ['%kernel.project_dir%/views']

我还尝试实现自己的传输序列化器,继承自 Symfony\Component\Messenger\Transport\Serialization\Serializer,注入默认的 Symfony 序列化器(SerializerInterface)并通过将序列化器实例传递给父构造函数来替换它。还是不行。

namespace App\Framework\Messenger;

use Symfony\Component\Messenger\Transport\Serialization\Serializer;
use Symfony\Component\Serializer\SerializerInterface;

final class JSONMessageSerializer extends Serializer
{
    public function __construct(SerializerInterface $serializer)
    {
        parent::__construct($serializer, 'json', []);
    }
}

最后但并非最不重要的一点是,我尝试实现自己的传输序列化器并构建我的序列化器组件,添加所有规范化器和我需要的一切。但我似乎找不到加载整个 yaml 文件目录的方法,因为 ClassMetadataFactory 的构造函数采用 YamlFileLoader,它似乎只适用于单个文件。

$loader = new YamlFileLoader('/path/to/your/definition.yaml')
$classMetadataFactory = new ClassMetadataFactory();

所以我没有新鲜的想法,任何人都可以解释一下吗?文档似乎很少,因为默认是使用传输的 PHP 序列化程序,但我真的想使用 JSON,以便将来消息可以被其他微服务甚至其他技术堆栈使用。

谢谢!

4

0 回答 0