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, set
ayrı 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ılabilirformat
daha anlamlı filtreye odaklanıyorformat
filtreyi kullanmaktırformat
Filtre gibi çalışır sprintf
diğer programlama dillerinde fonksiyonuformat
Filtre 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!
sprintf
diğ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 }}"