gpt4 book ai didi

Symfony2 循环引用

转载 作者:行者123 更新时间:2023-12-04 08:50:08 25 4
gpt4 key购买 nike

可能我在模板中遇到了循环问题。

services:
twig_menu:
class: Cms\PageBundle\Twig\Menu
arguments: ['@doctrine.orm.entity_manager', "@templating"]

代码 php:

namespace Cms\PageBundle\Twig;

use Doctrine\ORM\EntityManager;
use Symfony\Component\Templating\EngineInterface;
class Menu {
protected $em, $templating;
public function __construct(EntityManager $em, EngineInterface $templating){
$this->em = $em;
$this->templating=$templating;
}
public function show($typ){
$menu=$this->em->getRepository("CmsAdminBundle:Menu")->findBy(array('type_id'=>$typ));
return $this->templating->render("menu.html.twig", array('links'=>$menu));
}
}

模板:

<ul>
{% for link in links %}
<li><a href="{{ link.href }}">{{ link.name }}</a></li>
{% endfor %}
</ul>

当我在第一次刷新时清除缓存时没问题,接下来我得到这个错误:

Circular reference detected for service "templating", path: "templating -> twig -> twig_menu".

最佳答案

templating 需要 twigtwig 需要 twig_menutwig_menu 需要 模板化。因此你的循环引用问题。这可能是因为您处于开发模式,由于分析器,Twig 有更多的依赖项。

Fabien Potencier himself has answered this problem on GitHub通过说“只需注入(inject)服务容器并从中获取 Twig”。这是一个快速而肮脏的解决方案,但它应该可以工作而不会受到任何严重的惩罚。

但是因为注入(inject)服务容器是一种代码味道,您可能希望避免它。更深入(更正确)的解决方案是重构,使 twig 不依赖于 twig_menu,但在不了解您的整个项目的情况下,很难说您如何做到这一点.

关于Symfony2 循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29520358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com