540 Stimmen

Wie man Strings in twig verkettet

Weiß jemand, wie man Zeichenketten in Twig verkettet? Ich möchte etwas tun wie:

{{ concat('http://', app.request.host) }}

12voto

lsouza Punkte 2353

Wann immer Sie einen Filter mit einer verketteten Zeichenkette (oder einer einfachen mathematischen Operation) verwenden müssen, sollten Sie ihn mit ()'s einschließen. Beispiel..:

{{ ('http://' ~ app.request.host) | url_encode }}

9voto

luchaninov Punkte 6456

Sie können verwenden ~ comme {{ foo ~ 'inline string' ~ bar.fieldName }}

Sie können aber auch Ihre eigenen concat Funktion, um sie wie in Ihrer Frage zu verwenden:
{{ concat('http://', app.request.host) }} :

src/AppBundle/Twig/AppExtension.php

<?php

namespace AppBundle\Twig;

class AppExtension extends \Twig_Extension
{
    /**
     * {@inheritdoc}
     */
    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('concat', [$this, 'concat'], ['is_safe' => ['html']]),
        ];
    }

    public function concat()
    {
        return implode('', func_get_args())
    }

    /**
     * {@inheritdoc}
     */
    public function getName()
    {
        return 'app_extension';
    }
}

app/config/services.yml :

services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        public: false
        tags:
            - { name: twig.extension }

6voto

Minras Punkte 3866

In Symfony können Sie dies für Protokoll und Host verwenden:

{{ app.request.schemeAndHttpHost }}

Allerdings hat @alessandro1997 eine perfekte Antwort zur Verkettung gegeben.

5voto

dreftymac Punkte 29452

Kurze Antwort (TL;DR)

  • Die Verkettung von Strings in Twig kann auch mit der format() Filter

Ausführliche Antwort

Kontext

  • Twig 2.x
  • Erstellung und Verkettung von Zeichenketten

Problem

  • Szenario: DeveloperGailSim möchte eine String-Verkettung in Twig durchführen
    • Andere Antworten in diesem Thread befassen sich bereits mit dem Concat-Operator
    • Diese Antwort konzentriert sich auf die format Filter, der aussagekräftiger ist

Lösung

  • Ein alternativer Ansatz ist die Verwendung der format Filter
  • El format Filter funktioniert wie der sprintf Funktion in anderen Programmiersprachen
  • El format Filter kann bei komplexeren Zeichenketten weniger umständlich sein als der ~-Operator

Beispiel00

  • example00 string concat bare

    {{ "%s%s%s!"|format('alpha','bravo','charlie') }}
    
    --- result --
    
    alphabravocharlie!

Beispiel01

  • example01 string concat mit dazwischenliegendem Text

    {{ "The %s in %s falls mainly on the %s!"|format('alpha','bravo','charlie') }}
    
    --- result --
    
    The alpha in bravo falls mainly on the charlie!

Beispiel02

  • example02 string concat mit numerischer Formatierung
  • folgt der gleichen Syntax wie sprintf in anderen Sprachen

    {{ "The %04d in %04d falls mainly on the %s!"|format(2,3,'tree') }}
    
    --- result --
    
    The 0002 in 0003 falls mainly on the tree!

Siehe auch

3voto

Gingi Punkte 145

Um Zeichenketten, Variablen und Übersetzungen zu mischen, gehe ich einfach wie folgt vor:

    {% set add_link = '
    <a class="btn btn-xs btn-icon-only" 
       title="' ~ 'string.to_be_translated'|trans ~ '" 
       href="' ~ path('acme_myBundle_link',{'link':link.id})  ~ '">
    </a>
    ' %}

Obwohl alles durcheinander ist, funktioniert es hervorragend.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X