问题描述
我正在使用Symfony 2.7,并根据以下教程将所有日志写入数据中
I am using Symfony 2.7 and i am writing all logs to data based on below tutorial
服务中我有
monolog.db_handler:
class: AppBundle\Util\MonologDBHandler
arguments: ['@doctrine.orm.entity_manager']
在monlog db中我遵循的处理程序
in monlog db handler i have following
class MonologDBHandler extends AbstractProcessingHandler
{
/**
* @var EntityManagerInterface
*/
protected $em;
/**
* MonologDBHandler constructor.
* @param EntityManagerInterface $em
*/
public function __construct(EntityManagerInterface $em)
{
parent::__construct();
$this->em = $em;
}
/**
* Called when writing to our database
* @param array $record
*/
protected function write(array $record)
{
$logEntry = new Log();
$logEntry->setMessage($record['message']);
$logEntry->setLevel($record['level']);
$logEntry->setLevelName($record['level_name']);
$logEntry->setExtra($record['extra']);
$logEntry->setContext($record['context']);
$this->em->persist($logEntry);
$this->em->flush();
}
}
如果启用开发人员模式,则会出现以下错误
if i enable dev mode i am getting following error
我知道由于服务主义注入而导致的错误。我如何能解决这个问题。谢谢
I know this error due to service doctrine injection .how i can sole this issue.Thank you
推荐答案
这种方法是一个非常糟糕的主意,应避免使用,但是您可以通过访问实体管理器来摆脱循环引用全局$ kernel变量。
This approach is a really bad idea and should be avoided but you can get rid of the circular reference by accessing the entity manager via the global $kernel variable.
class MonologDBHandler extends AbstractProcessingHandler
{
public function __construct()
{
parent::__construct();
}
protected function write(array $record)
{
global $kernel;
$em = $kernel->getContainer()-get('doctrine.orm.entity_manager');
然后从服务定义中删除arguments部分。
And then remove the arguments section from your service definition.
这篇关于Symfony抛出ServiceCircularReferenceException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!