本文介绍了Symfony抛出ServiceCircularReferenceException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-24 14:05