簡體   English   中英

包含模板時不存在Symfony3變量

[英]Symfony3 Variable does not exist in including template

我收到以下錯誤:變量“文件”不存在。

包含的模板Contractor:file.html.twig如下所示:

{{ dump(file) }}

主模板form.html.twig如下所示:

{% extends '::base.html.twig' %}
{% form_theme form 'NaSoftEdmBundle:Form:fields.html.twig' %}

...

{% block files %}
  {% for file in form.files %}
     {{ include('NaSoftEdmBundle:Contractor:file.html.twig', {'file': file}) }}
  {% endfor %}
{% endblock %}

控制器:

public function editAction(Request $request, Contractor $contractor)
{
    ...
    return $this->render('NaSoftEdmBundle:Contractor:form.html.twig', array(
        'form' => $form->createView(),
    ));
}

但是當我嘗試在主模板文件(form.html.twig)中顯示變量時,變量變為可用:

{% for file in form.files %}
   {{ dump(file) }} {# it work! #}
{% endfor %}


ContractorFile {#499 ▼
 -id: 154
 -uploadedFile: null
 -name: "57c6d217d9a92.jpg"
 -origName: "1471590585502.jpg"
 -path: "/contractor/docs/files/2/335"
 -size: 153536
 -mimeType: "image/jpeg"
 -updateDate: DateTime {#496 ▶}
 -contractor: Contractor {#370 ▶}
}

命令php app/console cache:clear沒有幫助

將變量傳遞給Twig include命令的正確方法是:

{% include 'NaSoftEdmBundle:Contractor:file.html.twig' with {'file': file} %}

正如@walther在評論中指出的那樣,實際上並不需要傳遞變量,因為包含的模板可以訪問活動上下文的變量,即你可以簡單地寫:

{% include 'NaSoftEdmBundle:Contractor:file.html.twig' %}

並將使用file變量。

如果要分配新變量,仍然必須使用with語法,例如

{% include 'NaSoftEdmBundle:Contractor:files.html.twig' with {'files': form.files} %}

請參見http://twig.sensiolabs.org/doc/tags/include.html

問題是我在開始循環之前“for”包含了屬性data-prototype的相同模板:

data-prototype="{% filter escape %} 
     {% include 'NaSoftEdmBundle: Contractor: file.html.twig' with { '_form':form.files.vars.prototype} %}
{% endfilter %}"

我已經為屬性“data-prototype”創建了新模板並且它有效。

data-prototype="{% filter escape %} 
     {% include 'NaSoftEdmBundle: Contractor: filePrototype.html.twig' with { 'file':_form.files.vars.prototype} %}
{% endfilter %}"

已實現此操作以自定義模板集合

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM