Sensiolabs Insight:Twig模板不应包含业务逻辑

时间:2017-05-14 17:21:56

标签: symfony twig

我实际上是在Symfony 2.8项目上运行Sensiolabs Insight分析。

我的一些Twig模板存在一个主要问题:

  

Twig模板不应包含业务逻辑

相关消息始终相同:

  

模板太复杂,达到了10的深度,但只允许5个。

例如,使用以下模板:

{% extends "FBNGuideBundle::layout.html.twig" %}

{% block title %}
  {{ 'fbn.guide.page_title.bookmarks'|trans }}
{% endblock %}

{% block body %}

  <div id="bookmarks" data-bookmark-ids="{{bookmarkIds|json_encode()}}">

    {% if (restaurants|length > 0) %}

      <div class="restaurants">
        <h3>MES RESTOS</h3>
        {% for bookmark in restaurants %}
          <div class="bookmark" id="{{'bookmark-' ~ bookmark.id}}">
            <a href="{{ path('fbn_guide_restaurants', {'slug': bookmark.restaurant.slug} ) }}">{{ bookmark.restaurant.name }}</a>
            <br>
            <br>
            <button>SUPPRIMER DES FAVORIS</button>      
            <br>
            <hr>
        </div>
        {% endfor %}
      </div>

    {% endif %}

  </div>

{% endblock %}

我试图在一个单独的文件中包含<div id="bookmarks"></div>中包含的代码,并且深度已经减少,但它不是一个解决方案。我想问题是使用getter通过几个对象访问某些属性(即bookmark.restaurant.slug)

我有一个免费的计划,因此我无法访问与此警告相关的文档。任何人都知道如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:-2)

如果视图中有太多逻辑,则可以将其放在自定义的Twig Extension中。一个优点是,如果您在另一个页面中重用该部分,则不需要复制html,当然,代码更清晰:) 在您的情况下,您可以编写一个新的Twig Extension来呈现所有书签。

如果你现在还没有建立类似的东西,你可以在这里阅读http://symfony.com/doc/current/templating/twig_extension.html