检测到 "security.context "服务的循环引用。

我试着注入模板服务,结果是这样的。

<service id="myproject_notification.service.mail" class="%myproject_notification.service.mail.class%">
    <argument type="service" id="mailer" />
    <argument type="service" id="templating" />
</service>

2014-06-10 12-37-10

如果我从依赖关系中注释或删除模板服务,一切都能正常工作。我看到了关于这个问题的老问题,但似乎目前只有我一个人遇到这种情况。我是不是做错了什么?

Composer.json

"symfony/symfony": "~2.4",
"twig/extensions": "~1.0",
"symfony/assetic-bundle": "~2.3",
"symfony/swiftmailer-bundle": "~2.3",
"symfony/monolog-bundle": "~2.4",
"sensio/distribution-bundle": "~2.3",
"sensio/framework-extra-bundle": "~3.0",
"sensio/generator-bundle": "~2.3",
"incenteev/composer-parameter-handler": "~2.0",

Composer.lock

"name": "symfony/symfony",
"version": "v2.5.0",
...
"name": "twig/twig",
"version": "v1.15.1",

解决方案:

这个解决方案是快速解决问题的方法。这是可以避免的,请阅读评论。

对于这种特殊情况,最好的办法可能是注入 ServiceContainer 到你的服务。由于您似乎遇到了一个边缘情况,即 security.context 已被注入一些 templating 服务(如helpers),然后在你的例子中,这些服务被(间接)注入到 security.context.

试试这个。

<service id="myproject_notification.service.mail" class="%myproject_notification.service.mail.class%">
    <argument type="service" id="service_container" />
</service>

在你的类的构造函数中,使用如下。

class YourMailerClass
{
    protected $container; 

   public function __construct(ContainerInterface $container )
   {
     $this->container = $container; 
    } 

    public function sendMail()
    {
       $mailer = $this->container->get('mailer');
       $templating = $this->container->get('templating');
    }

}

请看这个Symfony Core开发者之间关于同样问题的对话。https:/github.comsymfonysymfonyissues2347

对于大多数情况下,注入服务容器是 不建议 对于 几个原因.

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何让一个Angular表单准备提交给后端团队

2022-11-2 19:48:25

未分类

如何在Intellij中找到一个方法的声明?

2022-11-2 19:59:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索