나뭇 가지에 끈을 연결하는 방법


447

누구든지 나뭇 가지에 끈을 연결하는 방법을 알고 있습니까? 나는 다음과 같은 것을하고 싶다 :

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

답변:


872

이것은 잘 작동합니다 :

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

같은 태그에 'trans'와 같은 필터를 추가하려면

{{ ('http://' ~ app.request.host) | trans }}

으로 아담 Elsodaney 지적 , 당신은 또한 사용할 수있는 문자열 보간 이 이중 인용 된 문자열을 필요로 않습니다 :

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

3
답변 주셔서 감사합니다. 그러나 그것은 나타납니다 | trans 필터가 작동하지 않습니다 (예 : {{ 'test_'~ name | trans}}는 내 항목을 번역하지 않습니다. 어떻게해야하는지 생각하십니까? thx!
guillaumepotier

12
예, 연결된 문자열을 보유 할 변수를 만들어야합니다. 예 : {% set foo = 'http://' ~ app.request.host %}. 그리고 당신은 할 수 있습니다 : {{ foo | trans }}.
Alessandro Desantis

75
한 줄로 번역 : {{( 'test_'~ name) | trans}}
Johnny

6
감사합니다. 따라서 문제는 필터가 연결 연산자보다 우선 순위가 높다는 것입니다.
Alessandro Desantis

이것은 변수에 대한 필터와 함수 토큰 자체를 사용하여 함수에 전달 된 문자열을 하나의 인수로 연결하는 {{ form_open('admin/files/?path='~file_path|urlencode)|raw }}데 도움이되었습니다. 추가 변수가 필요하지 않습니다.
웨슬리 머치


26

찾고있는 연산자는 Alessandro가 말한 것처럼 Tilde (~)이며 여기 문서에 있습니다.

~ : 모든 피연산자를 문자열로 변환하고 연결합니다. {{ "안녕하세요 ~ ~ 이름 ~"! " }}이 반환합니다 (이름이 'John'이라고 가정) Hello John !. – http://twig.sensiolabs.org/doc/templates.html#other-operators

다음은 문서 어딘가에 예제입니다 .

{% set greeting = 'Hello' %}
{% set name = 'Fabien' %}

{{ greeting ~ name|lower }}   {# Hello fabien #}

{# use parenthesis to change precedence #}
{{ (greeting ~ name)|lower }} {# hello fabien #}

22

이 경우 일반 텍스트와 변수를 출력하려는 ​​경우 다음과 같이 할 수 있습니다.

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

일부 변수를 연결하려면 alessandro1997의 솔루션이 훨씬 좋습니다.


2
이것은 나를 위해 작동하지 않습니다, 다른 필터로 전체 문자열을 url_encode해야합니다 ...
stoefln

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

보시다시피 set별도의 라인 에서 사용할 필요없이 필터 및 기능에서 작동 합니다.


11

연결된 문자열 (또는 기본 수학 연산)이있는 필터를 사용해야 할 때마다 ()로 감싸 야합니다. 예 :

{{ ('http://' ~ app.request.host) | url_encode }}


1
매우 도움이되었습니다. 감사합니다. 번역 키로 사용할 변수를 연결해야했습니다.
afilina

6

Symfony에서는이를 프로토콜 및 호스트에 사용할 수 있습니다.

{{ app.request.schemeAndHttpHost }}

@ alessandro1997은 연결에 대한 완벽한 대답을했지만.


6

당신은 ~처럼 사용할 수 있습니다{{ foo ~ 'inline string' ~ bar.fieldName }}

그러나 concat질문 에서처럼 사용할 함수를 직접 만들 수도 있습니다 .
{{ concat('http://', app.request.host) }}:

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

에서 app/config/services.yml:

services:
    app.twig_extension:
        class: AppBundle\Twig\AppExtension
        public: false
        tags:
            - { name: twig.extension }

매우 좋은 솔루션
Daniel

3

빠른 답변 (TL; DR)

  • format()필터를 사용하여 나뭇 가지 문자열 연결을 수행 할 수도 있습니다.

자세한 답변

문맥

  • 나뭇 가지 2.x
  • 문자열 구축 및 연결

문제

  • 시나리오 : DeveloperGailSim이 Twig에서 문자열 연결을 수행하려고합니다.
    • 이 스레드의 다른 답변은 이미 concat 연산자를 해결합니다.
    • 이 답변 format은보다 표현적인 필터 에 중점을 둡니다.

해결책

  • 다른 방법은 format필터 를 사용하는 것입니다
  • format필터는 sprintf다른 프로그래밍 언어 의 함수 처럼 작동 합니다
  • format더 복잡한 문자열 의 경우 필터는 ~ 연산자보다 성 가시지 않을 수 있습니다.

예 00

  • example00 문자열 연결

    {{ "% s % s % s!"| format ( 'alpha', 'bravo', 'charlie')}}
    
    --- 결과-
    
    알파 브라보 찰리!
    
    

실시 예 01

  • 텍스트가 포함 된 example01 문자열 연결

    {{ "% s의 % s는 주로 % s에 속합니다!"| format ( 'alpha', 'bravo', 'charlie')}}
    
    --- 결과-
    
    브라보의 알파는 주로 찰리에 떨어집니다!
    
    

예 02

  • 숫자 형식의 example02 문자열 연결
  • sprintf다른 언어 와 동일한 구문을 따릅니다.

    {{ "% 04d의 % 04d는 주로 % s에 속합니다!"| format (2,3, 'tree')}}
    
    --- 결과-
    
    0003의 0002는 주로 나무에 떨어진다!
    
    

또한보십시오


1

문자열, 변수 및 번역을 혼합하려면 간단히 다음을 수행하십시오.

    {% 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>
    ' %}

모든 것이 섞여 있지만 매력처럼 작동합니다.


-1

"{{...}}"구분 기호는 문자열 내에서도 사용할 수 있습니다.

"http://{{ app.request.host }}"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.