Dallarda dizeleri birleştirme


Yanıtlar:


872

Bu iyi çalışmalıdır:

{{ 'http://' ~ app.request.host }}

Aynı etikete 'trans' gibi bir filtre eklemek için şunu kullanın:

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

Adam Elsodaney'in belirttiği gibi , dize enterpolasyonunu da kullanabilirsiniz , bu çift tırnaklı dizeler gerektirir:

{{ "http://#{app.request.host}" }}

3
Cevabınız için teşekkürler. Ama öyle görünüyor ki | Trans filtresi bu konuda çalışmalarını değildir (örn: {{ 'TEST_' ~ isim |} trans} Öğelerimi çevirmek olmaz sen nasıl thx yapmak için bir fikriniz var mı.?!
guillaumepotier

12
Evet, birleştirilmiş dizeyi tutmak için bir değişken oluşturmanız gerekir. Ör: {% set foo = 'http://' ~ app.request.host %}. Sonra da yapabilirsiniz: {{ foo | trans }}.
Alessandro Desantis

75
Bir satırda çeviri: {{('test_' ~ ad) | trans}}
Johnny

6
Teşekkür ederim. Dolayısıyla sorun, filtrelerin birleştirme işlecinden daha yüksek önceliğe sahip olmasıdır.
Alessandro Desantis

Bu, değişken üzerinde filtreler ve işlev belirtecinin kendisi ile bir işleve geçirilen dizeleri birleştirmek için çalıştı: {{ form_open('admin/files/?path='~file_path|urlencode)|raw }}Ek bir değişkene gerek yok.
Wesley Murch


26

Aradığınız operatör Tilde (~), Alessandro'nun dediği gibi, ve burada belgelerde:

~: Tüm işlenenleri dizgilere dönüştürür ve birleştirir. {{"Merhaba" ~ ad ~ "!" }} dönecektir (adın 'John' olduğu varsayılarak) Merhaba John !. - http://twig.sensiolabs.org/doc/templates.html#other-operators

Ve burada dokümanlarda başka bir yerde bir örnek :

{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}

{{ greeting ~ name|lower }}   {# Hello fabien #}

{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}

22

Bu durumda, düz metin ve bir değişken çıkarmak istediğinizde, bunu şu şekilde yapabilirsiniz:

http://{{ app.request.host }}

Bazı değişkenleri birleştirmek istiyorsanız, alessandro1997'nin çözümü çok daha iyi olurdu.


2
Bu benim için çalışmıyor, çünkü ben başka bir filtre ile tüm dize
url_encode

14
{{ ['foo', 'bar'|capitalize]|join }}

Gördüğünüz gibi bu, setayrı bir satırda kullanmanıza gerek kalmadan filtreler ve işlevlerle çalışır .


11

Birleştirilmiş bir dizeye (veya temel bir matematik işlemine) sahip bir filtre kullanmanız gerektiğinde () ile sarmalısınız. Örneğin.:

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


1
Çok faydalı, teşekkürler. Çeviri anahtarı olarak kullanmak için değişkenleri birleştirmem gerekiyordu.
afilina

6

Symfony'de bunu protokol ve ana bilgisayar için kullanabilirsiniz:

{{ app.request.schemeAndHttpHost }}

@ Alessandro1997, birleştirme hakkında mükemmel bir cevap verdi.


6

Sen kullanabilirsiniz ~gibi{{ foo ~ 'inline string' ~ bar.fieldName }}

Ancak concat, sorunuzdaki gibi kullanmak için kendi işlevinizi de oluşturabilirsiniz
{{ concat('http://', app.request.host) }}:

İçinde 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';
    }
}

İçinde app/config/services.yml:

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

Çok iyi bir çözüm
Daniel

3

Hızlı Yanıt (TL; DR)

  • format()Filtre ile dal dizesi birleştirmesi de yapılabilir

Detaylı cevap

bağlam

  • Dal 2.x
  • Dize oluşturma ve birleştirme

Sorun

  • Senaryo: DeveloperGailSim, Twig'de dize birleştirme yapmak istiyor
    • Bu konudaki diğer cevaplar zaten concat operatörüne yöneliktir
    • Bu cevap formatdaha anlamlı filtreye odaklanıyor

Çözüm

  • Alternatif yaklaşım formatfiltreyi kullanmaktır
  • formatFiltre gibi çalışır sprintfdiğer programlama dillerinde fonksiyonu
  • formatFiltre daha karmaşık dizeleri ~ operatör daha az külfetli olabilir

Example00

  • example00 string concat çıplak

    {{"% s% s% s!" | biçim ('alfa', 'bravo', 'charlie')}}
    
    --- sonuç -
    
    alphabravocharlie!
    
    

Example01

  • araya giren metinle example01 karakter dizisi

    {{"% S içindeki% s, esas olarak% s!" | Biçimine ('alpha', 'bravo', 'charlie')}}
    
    --- sonuç -
    
    Bravo'daki alfa esas olarak charlie'ye düşüyor!
    
    

Example02

  • sayısal biçimlendirmeli example02 karakter dizisi
  • sprintfdiğer dillerle aynı sözdizimini izler

    {{"% 04d içindeki% 04d, esas olarak% s!" | Biçimine (2,3, 'ağaç')}}
    
    --- sonuç -
    
    0003'teki 0002 esas olarak ağaca düşer!
    
    

Ayrıca bakınız


1

Dizeleri, değişkenleri ve çevirileri karıştırmak için şunları yaparım:

    {% 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>
    ' %}

Her şeyin karışmasına rağmen, bir cazibe gibi çalışıyor.


-1

"{{...}}" - sınırlayıcı ayrıca dizelerde de kullanılabilir:

"http://{{ app.request.host }}"
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.