2017-05-14 30 views
3

我实际上在Symfony 2.8项目上运行Sensiolabs Insight分析。Sensiolabs Insight:小枝模板不应包含业务逻辑

我有一个重大问题与我的一些嫩枝模板:

嫩枝模版应该包含业务逻辑

相关的消息始终是相同的:

模板太复杂,达到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)

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

感谢。

+0

这是因为你使用bookmark.restaurant.slug这个警告是愚蠢的意思是数据的确在您的控制器中“准备好”,然后访问它。我想这是这种静态分析工具的局限性。 – COil

+1

@COIL我同意你的观点,数据是在控制器级别准备的,并且在那之前是在学习库级别(加入)。但是,我分发了[Symfony demo回购](https://github.com/symfony/symfony-demo)并运行了Insight分析。我没有得到这个警告,例如,在这个应用程序中,您可以在模板中找到如下所示的内容:**'{%for post.comments%} ... {{comment.author.fullName}}。 .. {%endfor%} ** ** – Cruz

+2

@COil你说得对,我只是联系了Insight的支持,这里是答案:“对我来说,你的模板是完美的;)看起来我们的算法存在一个错误。我将在我们的内部错误跟踪器中打开一张新票。 与此同时,您可以放心地忽略这种违规行为。“ – Cruz

回答

-2

当你在视图中有太多的逻辑,你可以把它放在一个自定义的树枝延伸。一个优点是你不需要复制的HTML,如果你重用那部分在另一个页面,当然,代码更清晰:) 在你的情况下,你可以写一个新的Twig Extension来呈现所有的书签。

如果没有建立类似至今somethng,您可以在这里,因为在这种情况下读到它http://symfony.com/doc/current/templating/twig_extension.html

+0

我不认为Twig扩展是为此目的而设计的。看到我上面的最新评论。 – Cruz

+0

不,不需要扩展,模板中没有业务逻辑。 – COil

+0

我没有说他们是为此目的而设计的。这只是更好地分离代码并摆脱这种警告的替代方案。 – Daniella