que programacion poner numeros muchas formas espacio datos cómo concatenar celdas syntax twig templating

syntax - programacion - Cómo concatenar cadenas en ramita.



que es concatenar en excel (11)

¿Alguien sabe cómo concatenar cadenas en ramita? Quiero hacer algo como:

{{ concat(''http://'', app.request.host) }}


Respuesta rápida (TL; DR)

  • La concatenación de cadenas de ramitas también se puede hacer con el filtro de format()

Respuesta detallada

Contexto

  • Ramita 2.x
  • Construcción de cuerdas y concatenación.

Problema

  • Escenario: DeveloperGailSim desea hacer concatenación de cadenas en Twig
    • Otras respuestas en este hilo ya están dirigidas al operador concat
    • Esta respuesta se centra en el filtro de format que es más expresivo.

Solución

  • Enfoque alternativo es utilizar el filtro de format
  • El filtro de format funciona como la función sprintf en otros lenguajes de programación
  • El filtro de format puede ser menos engorroso que el operador ~ para cadenas más complejas

Example00

  • example00 string concat bare

    {{ "%s%s%s!"|format(''alpha'',''bravo'',''charlie'') }} --- result -- alphabravocharlie!

Example01

  • ejemplo01 cadena concat con texto intermedio

    {{ "The %s in %s falls mainly on the %s!"|format(''alpha'',''bravo'',''charlie'') }} --- result -- The alpha in bravo falls mainly on the charlie!

Ejemplo02

  • Ejemplo de concat. de cadena 02 con formato numérico
  • sigue la misma sintaxis de sprintf en otros idiomas

    {{ "The %04d in %04d falls mainly on the %s!"|format(2,3,''tree'') }} --- result -- The 0002 in 0003 falls mainly on the tree!

Ver también


El delimitador "{{...}}" también se puede usar dentro de las cadenas:

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


El operador que busca es Tilde (~), como dijo Alessandro, y aquí está en la documentación:

~: Convierte todos los operandos en cadenas y los concatena. {{"Hola" ~ nombre ~ "!" }} regresaría (asumiendo que el nombre es ''John'') ¡Hola John! - http://twig.sensiolabs.org/doc/templates.html#other-operators

Y aquí hay un ejemplo en otro lugar en la documentación :

{% set greeting = ''Hello'' %} {% set name = ''Fabien'' %} {{ greeting ~ name|lower }} {# Hello fabien #} {# use parenthesis to change precedence #} {{ (greeting ~ name)|lower }} {# hello fabien #}


En Symfony puedes usar esto para protocolo y host:

{{ app.request.schemeAndHttpHost }}

Aunque @ alessandro1997 dio una respuesta perfecta sobre la concatenación.


En este caso, donde desea generar texto sin formato y una variable, puede hacerlo de la siguiente manera:

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

Si desea concatenar algunas variables, la solución de alessandro1997 sería mucho mejor.


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 entre comillas dobles:

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


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 se mezcla, funciona como un encanto.


Puedes usar ~ like {{ foo ~ ''inline string'' ~ bar.fieldName }}

Pero también puedes crear tu propia función concat para usarla como en tu 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 }


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 }}



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

Como puede ver, esto funciona con filtros y funciones sin necesidad de usar el set en una línea separada.