Hvordan kan jeg sende parametre til en Symfony2 Twig blokk?

stemmer
18

Jeg vil generere tabelloverskrifter i en kvist blokk og bruke dem over hele siden, siden har ca 5 forskjellige tabeller med omtrent de samme overskriftene. Blokken kode er slik:

{% block table_headers %}
    <th>Fiscal Year</th>
    <th>End Date</th>
    <th>Period Length</th>
    {% for item in result.FinancialStatements.COAMap.mapItem %}
        {% if item.statementType == statementType %}
            <th>{{ item._ }} ({{ item.coaItem }})</th>
        {% endif %}
    {% endfor %} 
{% endblock %}

Nøkkelen linje i koden ovenfor er

{% if item.statementType == statementType %}

Jeg ønsker å sende statementType som parameter hvor jeg gjengi blokken, som så:

{% render block.table_headers with {'statementType': 'INC'} %}

Men dette fungerer ikke. Jeg ønsker å holde blokken og sin gjengivelse i samme fil (men forskjellige blokker), for konseptuell nærhet.

Er det også mulig å bruke blokker som dette? Jeg har sett på de Symfony2 docs og kunne ikke finne noe som foreslo dette kan gjøres, men det synes så tydelig bruk av blokker til meg.

Publisert på 20/05/2011 klokken 06:58
kilden bruker
På andre språk...                            


7 svar

stemmer
12

Det er en oppdatering til inkludere tag i Symfony 2.2 som kan hjelpe deg med dette. Her er et eksempel på den nye koden: {{ include('FTWGuildBundle:Help:popover.html.twig', {'content':helpContent,'title':helpTitle}) }}

Dette kan være det du trenger, siden det unngår å måtte gjøre en sub-forespørsel til en kontroller ( rendergjør dette) vil det være bedre resultater.

I mitt eksempel, jeg inkludert HTML for en hjelp popover og gi tittelen og innholdet.

Svarte 12/04/2013 kl. 20:49
kilden bruker

stemmer
7

{% render block.table_headers with {'statementType': 'INC'} %}er ikke anerkjent av Symfony. Du må bruke:

{% render "yourBundle:controleur:action" with { 'arg1' : 'value1', 'arg2' : 'value2' } %}
Svarte 22/08/2012 kl. 15:32
kilden bruker

stemmer
5

Nå kan vi bruke med syntaks:

{% with {
            'myVar1': myValue1,
            'myVar2': myValue2
        }
%}
        {{ block('toolbar', myTemplate) }}
{% endwith %}

Forplikte: https://github.com/twigphp/Twig/commit/02b084e2f5c3119604b1c0da388dd2438a012191

Svarte 08/03/2017 kl. 08:45
kilden bruker

stemmer
4

Høres ut som du vil Twig sin makroer funksjonen . Alternativt skrive blokken som en egen mal og bruk inkludere .

Svarte 03/06/2011 kl. 11:58
kilden bruker

stemmer
0

Ring noen metode for klassen med parametere uten nøkkel

{{ attribute(classname, methodname, [parameter1, parameter2]) }}

Ring noen metode for klassen med parametere med nøkkelen

{{ attribute(classname, methodname, {"parameter1" : parameter1, "parameter2" : parameter2]) }}

Hente egenskap av rekken / objektet

{{ attribute(array, key) }}

Svarte 24/07/2019 kl. 14:04
kilden bruker

stemmer
0

For hva det er verdt for deg. Her er et eksempel på hvordan jeg har gjort blokker av innhold. Dette er for en batch-app som sender e-post, så det er litt annerledes enn hva du prøver, men ikke desto mindre kan være nyttig

        $templateContent = $this->getContainer()->get('twig')->loadTemplate('FTWGuildBundle:AuctionNotification:notificationEmail.html.twig');
        $body = $templateContent->renderBlock('body', array('siteDomain' => $siteClient->getSiteDomain(), 'staticContentDomain' => $siteClient->getStaticContentDomain(), 'batch' => $batch->getNotifications(), 'auction_notification_lockout_period' => $this->getContainer()->getParameter('auction_notification_lockout_period')));
        $subject = ($templateContent->hasBlock("subject")
            ? $templateContent->renderBlock("subject", array('batchSize' => $batch->getSize(), 'batch' => $batch))
            : "Auction House Notifications");
Svarte 12/04/2013 kl. 20:54
kilden bruker

stemmer
0

En annen ville være å skape en Twig forlengelse, se

http://symfony.com/doc/current/cookbook/templating/twig_extension.html

Din Twig funksjon å ta vare på rende overskriften

return $this->renderView("MyBundle:Twig:tableHeader.html.twig", array( 'result' => $result));
Svarte 23/08/2012 kl. 03:10
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more