2017-05-14 27 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