379

Bất cứ ai cũng biết làm thế nào để nối các chuỗi trong twig? Tôi muốn làm một cái gì đó như:

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

Điều này sẽ hoạt động tốt:

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

Để thêm bộ lọc - như 'trans' - trong cùng một thẻ, hãy sử dụng

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

Như Adam Elsodaney chỉ ra , bạn cũng có thể sử dụng phép nội suy chuỗi , điều này không yêu cầu chuỗi trích dẫn kép:

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

Ngoài ra một tính năng ít được biết đến trong Twig là nội suy chuỗi :

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

Toán tử mà bạn đang tìm kiếm là Tilde (~), như Alessandro đã nói, và đây là tài liệu:

~: Chuyển đổi tất cả các toán hạng thành chuỗi và nối chúng. {{"Xin chào" ~ tên ~ "!" }} sẽ trở lại (giả sử tên là 'John') Xin chào John!. - http://twig.sensiolabs.org/doc/temsheet.html#other-operators

Và đây là một ví dụ ở một nơi khác trong các tài liệu :

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

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

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

Trong trường hợp này, nơi bạn muốn xuất văn bản đơn giản và một biến, bạn có thể làm như thế này:

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

Nếu bạn muốn nối một số biến, giải pháp của alessandro1997 sẽ tốt hơn nhiều.

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

Như bạn có thể thấy điều này hoạt động với các bộ lọc và chức năng mà không cần phải sử dụng settrên một dòng riêng biệt.

|
10

Bất cứ khi nào bạn cần sử dụng bộ lọc có chuỗi kết hợp (hoặc phép toán cơ bản), bạn nên bọc nó bằng (). Ví dụ.:

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

|
6

Trong Symfony bạn có thể sử dụng điều này cho giao thức và máy chủ:

{{ app.request.schemeAndHttpHost }}

Mặc dù @ alessandro1997 đã đưa ra một câu trả lời hoàn hảo về sự kết hợp.

|
4

Bạn có thể sử dụng ~như{{ foo ~ 'inline string' ~ bar.fieldName }}

Nhưng bạn cũng có thể tạo concatchức năng của riêng mình để sử dụng nó như trong câu hỏi của bạn
{{ concat('http://', app.request.host) }}::

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

Trong app/config/services.yml:

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

"{{...}}" - dấu phân cách cũng có thể được sử dụng trong các chuỗi:

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

Để trộn chuỗi, biến và dịch tôi chỉ cần làm như sau:

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

Mặc dù mọi thứ được trộn lẫn, nó hoạt động như một nét duyên dáng.

|
0

Trả lời nhanh (TL; DR)

  • Việc ghép chuỗi Twig cũng có thể được thực hiện với format()bộ lọc

Trả lời chi tiết

Bối cảnh

  • Cành 2.x
  • Xây dựng chuỗi và nối

Vấn đề

  • Kịch bản: DeveloperGailSim muốn thực hiện nối chuỗi trong Twig
    • Các câu trả lời khác trong chủ đề này đã giải quyết toán tử concat
    • Câu trả lời này tập trung vào formatbộ lọc có tính biểu cảm cao hơn

Dung dịch

  • Phương pháp thay thế là sử dụng formatbộ lọc
  • Bộ formatlọc hoạt động giống như sprintfchức năng trong các ngôn ngữ lập trình khác
  • Bộ formatlọc có thể ít cồng kềnh hơn toán tử ~ cho các chuỗi phức tạp hơn

Ví dụ00

  • chuỗi concat trần

    
    {{"% s% s% s!" | định dạng ('alpha', 'bravo', 'charlie')}}
    
    --- kết quả --
    
    alphabravocharlie!
    
    

Ví dụ01

  • concat chuỗi example01 với văn bản can thiệp

    
    {{"% S trong% s rơi chủ yếu vào định dạng% s!" | ('Alpha', 'bravo', 'charlie')}}
    
    --- kết quả --
    
    Các alpha trong bravo rơi chủ yếu trên charlie!
    
    

Ví dụ02

  • concai chuỗi example02 với định dạng số
  • theo cú pháp giống như sprintftrong các ngôn ngữ khác

    
    {{"% 04d trong% 04d rơi chủ yếu vào định dạng% s!" | (2,3, 'cây')}}
    
    --- kết quả --
    
    0002 trong 0003 rơi chủ yếu trên cây!
    
    

Xem thêm

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.