ใครรู้วิธีการเรียงสตริงในทวิก? ฉันต้องการทำสิ่งที่ชอบ:
{{ concat('http://', app.request.host) }}
ใครรู้วิธีการเรียงสตริงในทวิก? ฉันต้องการทำสิ่งที่ชอบ:
{{ concat('http://', app.request.host) }}
คำตอบ:
สิ่งนี้จะทำงานได้ดี:
{{ 'http://' ~ app.request.host }}
ในการเพิ่มตัวกรอง - เช่น 'trans' - ในการใช้แท็กเดียวกัน
{{ ('http://' ~ app.request.host) | trans }}
ขณะที่Adam Elsodaney ชี้ให้เห็นคุณยังสามารถใช้การแก้ไขสตริงได้ซึ่งต้องใช้สตริงที่มีเครื่องหมายคำพูดคู่:
{{ "http://#{app.request.host}" }}
{% set foo = 'http://' ~ app.request.host %}
เช่น: และจากนั้นคุณสามารถทำได้: {{ foo | trans }}
.
{{ form_open('admin/files/?path='~file_path|urlencode)|raw }}
ไม่จำเป็นต้องมีตัวแปรเพิ่มเติม
คุณลักษณะเล็กน้อยที่รู้จักใน Twig คือการแก้ไขสตริง :
{{ "http://#{app.request.host}" }}
ผู้ประกอบการที่คุณกำลังมองหาคือ Tilde (~) อย่างที่ Alessandro พูดและนี่คือในเอกสารประกอบ:
~: แปลงตัวถูกดำเนินการทั้งหมดเป็นสตริงและเชื่อมต่อพวกมันเข้าด้วยกัน {{"Hello" ~ name ~ "!" }} จะส่งคืน (สมมติว่าชื่อคือ '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 #}
ในกรณีนี้ที่คุณต้องการส่งออกข้อความธรรมดาและตัวแปรคุณสามารถทำเช่นนี้:
http://{{ app.request.host }}
หากคุณต้องการเชื่อมต่อตัวแปรบางตัวโซลูชันของ alessandro1997 จะดีขึ้นมาก
{{ ['foo', 'bar'|capitalize]|join }}
ในขณะที่คุณสามารถดูงานนี้กับตัวกรองและฟังก์ชั่นโดยไม่จำเป็นต้องใช้set
ในบรรทัดแยก
เมื่อใดก็ตามที่คุณจำเป็นต้องใช้ตัวกรองที่มีสตริงที่ต่อกัน (หรือการดำเนินการทางคณิตศาสตร์ขั้นพื้นฐาน) คุณควรจะห่อด้วย () เช่น.:
{{ ('http://' ~ app.request.host) | url_encode }}
ใน Symfony คุณสามารถใช้สิ่งนี้สำหรับโปรโตคอลและโฮสต์:
{{ app.request.schemeAndHttpHost }}
แม้ว่า @ alessandro1997 ให้คำตอบที่สมบูรณ์แบบเกี่ยวกับการต่อข้อมูล
คุณสามารถใช้~
เช่น{{ 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 }
format()
ตัวกรองformat
ตัวกรองซึ่งแสดงออกมากขึ้นformat
ตัวกรองformat
กรองการทำงานเช่นมีsprintf
ฟังก์ชั่นในการเขียนโปรแกรมภาษาอื่น ๆformat
กรองอาจจะยุ่งยากน้อยกว่าผู้ประกอบการ ~ สำหรับสตริงที่ซับซ้อนมากขึ้นสตริงตัวอย่าง example00
{{"% s% s% s!" | รูปแบบ ('alpha', 'bravo', 'charlie')}} --- ผลลัพธ์ -- alphabravocharlie!
สตริงการเชื่อมต่อ example01 พร้อมข้อความที่แทรกเข้ามา
{{"% s ใน% s อยู่ในรูปแบบ% s!" | รูปแบบ ('alpha', 'bravo', 'charlie')}} --- ผลลัพธ์ -- อัลฟาในไชโยตกอยู่กับชาร์ลีเป็นหลัก!
ตามไวยากรณ์เดียวกันsprintf
ในภาษาอื่น ๆ
{{"% 04d ใน% 04d ตรงกับ% s!" | รูปแบบ (2,3, 'tree')}} --- ผลลัพธ์ -- 0002 ใน 0003 อยู่บนต้นไม้เป็นหลัก!
ในการผสมสตริงตัวแปรและการแปลฉันทำดังต่อไปนี้:
{% 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>
' %}
แม้จะมีทุกอย่างปะปน แต่ก็ใช้งานได้เหมือนมีเสน่ห์
"{{... }}" - ตัวคั่นสามารถใช้ภายในสตริงได้:
"http://{{ app.request.host }}"