我尝试将symfony服务容器注入dcotrine动态连接wrapper_class
use Doctrine\DBAL\Connection;
class DynamicConnection extends Connection
{
public $container;
/**
* @required
* @param $container
*/
public function setContainer(ContainerInterface $container)
{
$this->container = $container;
}
}
我还尝试将其注入service.yaml
App\Service\Database\DynamicConnection:
calls:
- [setContainer, ['@service_container']]
但这也不起作用。我如何在这里注入服务容器? 我的目标是获取服务容器的变量:
$this->container->get('my.string.variable')
答案 0 :(得分:0)
您可以通过添加CompilerPass
来实现。对于简单的CompilerPass
,您可以通过实现Kernel
将其直接添加到应用程序CompilerPassInterface
类中:
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')
]);
}
}
但是请注意,正如其他用户所提到的,这不是一个很好的做法。您应该准确注入所需的内容,而不是容器服务。