我试图把枝条当作我服务的论据,但我总是犯同样的错误:
bootstrap.php.cache第2129行中的ServiceCircularReferenceException
检测到服务的循环引用" doctrine.orm.default_entity_manager",路径:" doctrine.orm.default_entity_manager - > doctrine.dbal.default_connection - > wh.participant_listener - > wh.participant_notification - >树枝 - > security.authorization_checker - > security.authentication.manager - > fos_user.user_provider.username - > fos_user.user_manager" .`
这是我的service.yml文件
wh.participant_notification:
class: WH\TrainingBundle\Notification\Notification
arguments: [@mailer, @twig]
wh.participant_listener:
class: WH\TrainingBundle\EventListener\ParticipantListener
arguments: [@wh.participant_notification]
tags:
- { name: doctrine.event_listener, event: postUpdate }
- { name: doctrine.event_listener, event: postPersist }
我的PartcicipantListenerFile
namespace WH\TrainingBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
use WH\TrainingBundle\Notification\Notification;
class ParticipantListener
{
protected $notification;
public function __construct(Notification $notification)
{
$this->notification = $notification;
}
}
这个问题只有在我传递第二次服务的@ wh.participant_notificationin参数时才存在
任何团体都有想法?
非常感谢
答案 0 :(得分:2)
我找到了一个解决方案,不是很漂亮,但它有效:
首先,我在服务的参数中传递服务容器
services:
wh.participant_notification:
class: WH\TrainingBundle\Notification\Notification
arguments: ['@service_container']
wh.participant_listener:
class: WH\TrainingBundle\EventListener\ParticipantListener
arguments: ['@wh.participant_notification']
tags:
- { name: doctrine.event_listener, event: postPersist }
然后在我的Notification.php类中:
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
private $container;
public function __construct(Container $container) {
$this->container = $container;
}
public function subscribValidation ($participant) {
$templating = $this->container->get('templating');
$mailer = $this->container->get('mailer');
...
我无法创建受保护的var $ twig,因为问题仍然存在。 我再说一遍,它只有twig服务(或模板)。 也许另一个人找到了更好的解决方案......
答案 1 :(得分:0)
圆形信息虽然不清楚,但应该引导你。
Doctrine实体管理器加载其中的侦听器wh.participant_notification
。您的服务需要twig
,而这需要一系列其他事物,其中包含学说实体经理。这导致上述异常。
此问题的一个解决方案是使用setter injection
因此,您可以将服务定义为:
wh.participant_notification:
class: WH\TrainingBundle\Notification\Notification
calls:
- [setMailer, ["@mailer"]]
- [setTemplating, ["@templating"]]
并向您的Notification类添加setter方法
class Notification
{
private $mailer;
private $templating;
public function setMailer(\Mailer $mailer)
{
$this->mailer = $mailer;
}
public function setTemplating(\Symfony\Bundle\TwigBundle\TwigEngine $templating)
{
$this->templating= $templating;
}
...your code...