Respuestas:
Esto debería funcionar bien:
{{ 'http://' ~ app.request.host }}
Para agregar un filtro, como 'trans', en la misma etiqueta, use
{{ ('http://' ~ app.request.host) | trans }}
Como señala Adam Elsodaney , también puede usar la interpolación de cadenas , esto requiere cadenas con comillas dobles:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
. Y entonces usted puede hacer: {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
no es necesaria una variable adicional.
También una característica poco conocida en Twig es la interpolación de cadenas :
{{ "http://#{app.request.host}" }}
El operador que está buscando es Tilde (~), como dijo Alessandro, y aquí está en la documentación:
~: Convierte todos los operandos en cadenas y los concatena. {{"Hola" ~ nombre ~ "!" }} volvería (suponiendo que el nombre es 'John') ¡Hola John !. - http://twig.sensiolabs.org/doc/templates.html#other-operators
Y aquí hay un ejemplo en otro lugar de los documentos :
{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}
{{ greeting ~ name|lower }} {# Hello fabien #}
{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}
En este caso, donde desea generar texto plano y una variable, puede hacerlo así:
http://{{ app.request.host }}
Si desea concatenar algunas variables, la solución de alessandro1997 sería mucho mejor.
{{ ['foo', 'bar'|capitalize]|join }}
Como puede ver, esto funciona con filtros y funciones sin necesidad de usar set
en una línea separada.
Siempre que necesite usar un filtro con una cadena concatenada (o una operación matemática básica) debe envolverlo con (). P.ej.:
{{ ('http://' ~ app.request.host) | url_encode }}
Puedes usar ~
como{{ foo ~ 'inline string' ~ bar.fieldName }}
Pero también puede crear su propia concat
función para usarla como en su pregunta
{{ concat('http://', app.request.host) }}
:
En 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';
}
}
En app/config/services.yml
:
services:
app.twig_extension:
class: AppBundle\Twig\AppExtension
public: false
tags:
- { name: twig.extension }
format()
filtroformat
filtro que es más expresivo.format
filtroformat
filtro funciona como la sprintf
función en otros lenguajes de programación.format
filtro puede ser menos engorroso que el operador ~ para cadenas más complejasejemplo00 cuerda concat desnuda
Formato {{"% s% s% s!" | ('alpha', 'bravo', 'charlie')}} --- resultado - alphabravocharlie!
ejemplo01 cadena concat con texto intermedio
{{"¡El% s en% s cae principalmente en el formato% s!" | ('Alpha', 'bravo', 'charlie')}} --- resultado - ¡El alfa en bravo cae principalmente en el charlie!
sigue la misma sintaxis que sprintf
en otros idiomas
{{"El% 04d en% 04d cae principalmente en el formato% s!" | (2,3, 'árbol')}} --- resultado - ¡El 0002 en 0003 cae principalmente en el árbol!
Para mezclar cadenas, variables y traducciones, simplemente hago lo siguiente:
{% 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>
' %}
A pesar de que todo está mezclado, funciona a las mil maravillas.
El delimitador "{{...}}" también se puede usar dentro de cadenas:
"http://{{ app.request.host }}"