Symfony将服务容器注入条令连接包装器



我试图将symfony服务容器注入到dctrine动态连接wrapper_class 中

use DoctrineDBALConnection;    
class DynamicConnection extends Connection
{
public $container;
/**
* @required
* @param $container
*/
public function setContainer(ContainerInterface $container)
{
$this->container = $container;
}
}

我还试着把它和服务一起注入。yaml

AppServiceDatabaseDynamicConnection:
calls:
- [setContainer, ['@service_container']]

但这也不起作用。如何在此处注入服务容器?我的目标是获得服务容器的一个变量:

$this->container->get('my.string.variable')

您可以通过添加CompilerPass来完成此操作。对于简单的CompilerPass,您可以通过实现CompilerPassInterface:将其直接添加到应用程序Kernel类中

class Kernel extends BaseKernel implements CompilerPassInterface
{
use MicroKernelTrait;
...

public function process(ContainerBuilder $container)
{
$container
->getDefinition('doctrine.dbal.default_connection')
->addMethodCall('setContainer', [
new Reference('service_container')
]);
}
}

然而,请注意,正如其他用户所提到的,这不是一个很好的做法。您应该精确地注入您需要的内容,而不是容器服务。

最新更新