我试图将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')
]);
}
}
然而,请注意,正如其他用户所提到的,这不是一个很好的做法。您应该精确地注入您需要的内容,而不是容器服务。