Php 使用自定义Doctrine 2数据类型的依赖项注入

Php 使用自定义Doctrine 2数据类型的依赖项注入,php,orm,doctrine-orm,symfony,Php,Orm,Doctrine Orm,Symfony,我有一个与几乎相同的问题,但我需要将服务注入到自定义的数据类型中,而不是注入到服务器中 参考问题中的解决方案依赖于复制和修改条令源代码,因为条令初始化了类本身。希望另一种方法对自定义数据类型是可行的 这是针对Symfony3应用程序的,如果可以在那里应用一些魔法的话。根据第一个问题中的注释: 让这变得困难的是条令如何实例化自定义数据类型。条令的Type::addType($name,$className)方法只需要类名,而不是类的实例。您可以做的是在bundles扩展类中添加自定义的原则类型,然

我有一个与几乎相同的问题,但我需要将服务注入到自定义的数据类型中,而不是注入到服务器中

参考问题中的解决方案依赖于复制和修改条令源代码,因为条令初始化了类本身。希望另一种方法对自定义数据类型是可行的


这是针对Symfony3应用程序的,如果可以在那里应用一些魔法的话。

根据第一个问题中的注释:


让这变得困难的是条令如何实例化自定义数据类型。条令的
Type::addType($name,$className)
方法只需要类名,而不是类的实例。您可以做的是在bundles扩展类中添加自定义的原则类型,然后在
内核上注册一个事件侦听器服务。请求具有所需依赖项的
,并通过调用
\doctor\DBAL\Types::getType($name)->setSomeDependency($dependency)将它们设置到您的数据类型中。不过有点乱


在Matthias的文章中找到了很好的答案。扩展类的
boot()
方法看起来确实是一个设置依赖项的更自然的地方。

让这变得困难的是条令如何实例化自定义数据类型。条令的
Type::addType($name,$className)
方法只需要类名,而不是类的实例。您可以做的是在bundles扩展类中添加自定义的原则类型,然后在
内核上注册一个事件侦听器服务。请求具有所需依赖项的
,并通过调用
\doctor\DBAL\Types::getType($name)->setSomeDependency($dependency)将它们设置到您的数据类型中。不过有点乱。@ChadSikorra,这与我在发布问题后发现的方法类似,没有事件侦听器。我现在正在试验这个方法,它看起来很有希望。加上你的评论作为回答,我会接受的。