我目前正在通过使用捆绑实现的默认注入服务来使用 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,以便将来消息可以被其他微服务甚至其他技术堆栈使用。
谢谢!