Respostas:
Isso deve funcionar bem:
{{ 'http://' ~ app.request.host }}
Para adicionar um filtro - como 'trans' - na mesma tag, use
{{ ('http://' ~ app.request.host) | trans }}
Como Adam Elsodaney aponta , você também pode usar a interpolação de strings , isso requer strings com aspas duplas:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
. E então você pode fazer: {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
Não há necessidade de uma variável extra.
Também um recurso pouco conhecido no Twig é a interpolação de strings :
{{ "http://#{app.request.host}" }}
O operador que você está procurando é Tilde (~), como disse Alessandro, e aqui está na documentação:
~: Converte todos os operandos em seqüências de caracteres e concatena-os. {{"Olá" ~ nome ~ "!" }} retornaria (assumindo que o nome seja 'John') Olá John !. - http://twig.sensiolabs.org/doc/templates.html#other-operators
E aqui está um exemplo em outro lugar nos documentos :
{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}
{{ greeting ~ name|lower }} {# Hello fabien #}
{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
Nesse caso, onde você deseja gerar texto sem formatação e uma variável, faça o seguinte:
http://{{ app.request.host }}
Se você deseja concatenar algumas variáveis, a solução de alessandro1997 seria muito melhor.
{{ ['foo', 'bar'|capitalize]|join }}
Como você pode ver, isso funciona com filtros e funções sem a necessidade de usar set
em uma linha separada.
Sempre que você precisar usar um filtro com uma string concatenada (ou uma operação matemática básica), envolva-a com (). Por exemplo.:
{{ ('http://' ~ app.request.host) | url_encode }}
Você pode usar ~
como{{ foo ~ 'inline string' ~ bar.fieldName }}
Mas você também pode criar sua própria concat
função para usá-la como em sua pergunta:
{{ concat('http://', app.request.host) }}
:
No 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';
}
}
Em app/config/services.yml
:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
format()
filtroformat
filtro que é mais expressivoformat
filtroformat
filtro funciona como a sprintf
função em outras linguagens de programaçãoformat
filtro pode ser menos pesado que o operador ~ para strings mais complexasexample00 string concat bare
{{"% s% s% s!" | formato ('alfa', 'bravo', 'charlie')}} --- resultado - alphabravocharlie!
example01 string concat com texto intermediário
{{"O% s em% s cai principalmente no formato% s!" | ('Alpha', 'bravo', 'charlie')}} --- resultado - O alfa no bravo recai principalmente sobre o charlie!
segue a mesma sintaxe que sprintf
em outros idiomas
{{"O% 04d em% 04d cai principalmente no formato% s!" | (2,3, 'tree')}} --- resultado - O 0002 em 0003 cai principalmente na árvore!
Para misturar strings, variáveis e traduções, basta fazer o seguinte:
{% 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>
' %}
Apesar de tudo estar misturado, funciona como um encanto.
O delimitador "{{...}}" também pode ser usado dentro de strings:
"http://{{ app.request.host }}"