Yanıtlar:
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}" }}
{% set foo = 'http://' ~ app.request.host %}. Sonra da yapabilirsiniz: {{ foo | trans }}.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}Ek bir değişkene gerek yok.
Ayrıca Twig'de az bilinen bir özellik dize enterpolasyonudur :
{{ "http://#{app.request.host}" }}
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 #}
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.
{{ ['foo', 'bar'|capitalize]|join }}
Gördüğünüz gibi bu, setayrı bir satırda kullanmanıza gerek kalmadan filtreler ve işlevlerle çalışır .
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 }}
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 }
format()Filtre ile dal dizesi birleştirmesi de yapılabilirformatdaha anlamlı filtreye odaklanıyorformatfiltreyi kullanmaktırformatFiltre gibi çalışır sprintfdiğer programlama dillerinde fonksiyonuformatFiltre daha karmaşık dizeleri ~ operatör daha az külfetli olabilirexample00 string concat çıplak
{{"% s% s% s!" | biçim ('alfa', 'bravo', 'charlie')}}
--- sonuç -
alphabravocharlie!
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!
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!
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.
"{{...}}" - sınırlayıcı ayrıca dizelerde de kullanılabilir:
"http://{{ app.request.host }}"