टहनी में तारों को कैसे समेटना है


447

किसी को पता है कि टहनी में तारों को कैसे बदलना है? मैं कुछ ऐसा करना चाहता हूं:

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

जवाबों:


872

यह ठीक काम करना चाहिए:

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

एक फिल्टर जोड़ने के लिए - जैसे 'ट्रांस' - उसी टैग उपयोग में

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

जैसा कि एडम एलसोडेनी बताते हैं , आप स्ट्रिंग इंटरपोलेशन का भी उपयोग कर सकते हैं , इसके लिए दोहरे उद्धृत स्ट्रिंग्स की आवश्यकता होती है:

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

3
आपको जवाब के लिए धन्यवाद। लेकिन ऐसा लगता है कि | ट्रांस फिल्टर उस पर काम नहीं करता है (जैसे: {{'test_' ~ name | trans}} मेरी वस्तुओं का अनुवाद नहीं करेगा। क्या आपको पता है कि ऐसा कैसे करना है? thx!
guillaumepotier

12
हां, आपको कंसट्रेटेड स्ट्रिंग को पकड़ने के लिए एक वैरिएबल बनाना होगा। उदाहरण के लिए: {% set foo = 'http://' ~ app.request.host %}। और फिर आप कर सकते हैं {{ foo | trans }}:।
एलेसेंड्रो डेसेंटिस

75
एक पंक्ति में अनुवाद: {{('test_' ~ नाम) | ट्रांस}}
जॉनी

6
धन्यवाद। तो समस्या यह है कि फिल्टर्स में कंसेंट्रेशन ऑपरेटर की तुलना में अधिक पूर्वता होती है।
एलेसैंड्रो डेसेंटिस

यह मेरे लिए एक तर्क के रूप में एक तार में फंसे तार को समतल करने के लिए काम करता है, चर पर फिल्टर और स्वयं समारोह टोकन के साथ: {{ form_open('admin/files/?path='~file_path|urlencode)|raw }}एक अतिरिक्त चर के लिए कोई ज़रूरत नहीं है।
वेस्ले मर्च


26

आप जिस ऑपरेटर की तलाश कर रहे हैं, वह टिल्डे (~) है, जैसे कि एलेसेंड्रो ने कहा, और यहां यह दस्तावेज में है:

~: सभी ऑपरेंड्स को स्ट्रिंग्स में परिवर्तित करता है और उन्हें समेटता है। {{"हैलो" ~ नाम ~ "!" }} वापस आ जाएगा (संभालने का नाम 'जॉन' है) हैलो जॉन !. - 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 करनी है

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

जैसा कि आप setएक अलग लाइन पर उपयोग करने की आवश्यकता के बिना फिल्टर और कार्यों के साथ इस काम को देख सकते हैं ।


11

जब भी आपको किसी समवर्ती स्ट्रिंग (या एक बुनियादी गणित ऑपरेशन) के साथ एक फिल्टर का उपयोग करने की आवश्यकता होती है, तो आपको इसे () के साथ लपेटना चाहिए। उदाहरण के लिए .:

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


1
बहुत मददगार, धन्यवाद। मुझे अनुवाद कुंजी के रूप में उपयोग के लिए चर को समाहित करने की आवश्यकता थी।
अफिलिना

6

सिम्फनी में आप इसे प्रोटोकॉल और होस्ट के लिए उपयोग कर सकते हैं:

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

एक बहुत अच्छा समाधान
डैनियल

3

त्वरित उत्तर (TL; DR)

  • format()फिल्टर के साथ टहनी स्ट्रिंग संघनन भी किया जा सकता है

विस्तृत जवाब

प्रसंग

  • टहनी 2.x
  • स्ट्रिंग बिल्डिंग और कॉन्सटेन्शन

मुसीबत

  • परिदृश्य: DeveloperGimSim ट्विग में स्ट्रिंग समाकलन करना चाहता है
    • इस थ्रेड में अन्य उत्तर पहले से ही कॉनसैट ऑपरेटर को संबोधित करते हैं
    • यह उत्तर formatफिल्टर पर केंद्रित है जो अधिक अभिव्यंजक है

समाधान

  • वैकल्पिक दृष्टिकोण formatफिल्टर का उपयोग करना है
  • formatफिल्टर की तरह काम करता sprintfअन्य प्रोग्रामिंग भाषाओं में समारोह
  • formatफिल्टर और अधिक जटिल स्ट्रिंग्स के लिए ~ ऑपरेटर से कम बोझिल हो सकता है

Example00

  • example00 स्ट्रिंग कॉनैट नंगे

    {{"% s% s% s!" | प्रारूप ('अल्फा', 'ब्रावो', 'चार्ली')}}
    
    --- परिणाम --
    
    alphabravocharlie!
    
    

Example01

  • example01 स्ट्रिंग कॉनसैट इंटरवेंशन टेक्स्ट के साथ

    {{"% S में% s मुख्य रूप से% s पर गिरता है!" | स्वरूप ('अल्फा', 'ब्रावो', 'चार्ली')}}
    
    --- परिणाम --
    
    ब्रावो में अल्फा मुख्य रूप से चार्ली पर पड़ता है!
    
    

Example02

  • सांख्यिक स्वरूपण के साथ example02 स्ट्रिंग कॉनैट
  • sprintfअन्य भाषाओं के समान सिंटैक्स का अनुसरण करता है

    {{"% 04d% 04d मुख्य रूप से% s पर पड़ता है!" | स्वरूप (2,3, 'वृक्ष')}
    
    --- परिणाम --
    
    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 }}"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.