2017-02-27 36 views
6

Mam następujący szablon gałązka (kod jest w tym samym pliku):Gałązka Runtime Error: Impossible wywołać metodę („test”) na sznurku zmiennej

{% macro renderJob(fields) %} 
    // renders the job UI block, but I've removed it for simplicity 
    Hello world. 
{% endmacro %} 
{% block _jobs_widget %} 
    <div id="jobsContainer"> 
     {% for fields in form.children %} 
      {% dump fields %} 
      {{ _self.renderJob(fields) }} 
     {% endfor %} 
    </div> 
{% endblock %} 

Z jakiegoś powodu po uaktualnieniu do twig/twig = v2.1.0 Otrzymuję błąd follwing:

Impossible to invoke a method ("renderJob") on a string variable ("@AppBundle/Jobs/form/job.html.twig").

I zostały próbuje dowiedzieć się, co jest przyczyną tego bez powodzenia. To działało dobrze w 1.3.x. Zmienna fields zawiera poprawne dane, ale wygląda na to, że nie może przekazać jej do makra renderJob lub nie może znaleźć makra (co jest nieparzyste)?

Odpowiedz

4

Czy próbowałeś następujące?

{% import _self as renderJobMacro %} 

{% macro renderJob(fields) %} 
    // renders the job UI block, but I've removed it for simplicity 
    Hello world. 
{% endmacro %} 

{% block _jobs_widget %} 
    <div id="jobsContainer"> 
     {% for fields in form.children %} 
      {{ renderJobMacro.renderJob(fields) }} 
     {% endfor %} 
    </div> 
{% endblock %} 
+1

Dzięki! To apperas, jak powiedział @Mulikik, że odniesienie '' 'jest przestarzałe w Twig 2.0. Aby to działało, musiałem jednak "zaimportować" szablon do bloku '_jobs_widget'. Dzięki! – tftd

2

Myślę, że jestem zdeportowany z Twigg 2.0, może być konieczne sprawdzenie bez _self.

Sprawdź {{ renderJob(fields) }} zamiast {{ _self.renderJob(fields) }}

2

pojęcia dlaczego to działało wcześniej, ale trzeba jeszcze import makro, zanim będzie można go używać:

{% macro renderJob(fields) %} 
    // renders the job UI block, but I've removed it for simplicity 
    Hello world. 
{% endmacro %} 

{% import _self as macro %} 

{% block _jobs_widget %} 
    <div id="jobsContainer"> 
     {% for fields in form.children %} 
      {% dump fields %} 
      {{ macro.renderJob(fields) }} 
     {% endfor %} 
    </div> 
{% endblock %} 

fiddle