পাতলা কাঠের স্ট্রিংগুলি কীভাবে সংযুক্ত করতে হয়


447

যে কেউ জানেন কিভাবে ডানা দিয়ে স্ট্রিং সংযুক্ত করতে হয়? আমি এরকম কিছু করতে চাই:

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

উত্তর:


872

এটি ভাল কাজ করা উচিত:

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

ফিল্টার যুক্ত করতে - যেমন 'ট্রান্স' - একই ট্যাগ ব্যবহারে

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

অ্যাডাম এলসোডেনি যেমন উল্লেখ করেছেন , আপনি স্ট্রিং ইন্টারপোলেশনও ব্যবহার করতে পারেন , এর জন্য ডাবল উদ্ধৃত স্ট্রিংগুলির প্রয়োজন নেই:

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

3
উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ। তবে দেখা যাচ্ছে | ট্রান্স ফিল্টার তাতে কাজ করে না (উদাহরণস্বরূপ: {test 'test_' trans name | trans} my আমার আইটেমগুলি অনুবাদ করবে না that কীভাবে করবেন তা আপনার কী ধারণা আছে? THX!
guillaumepotier

12
হ্যাঁ, সংক্ষিপ্ত স্ট্রিং ধরে রাখতে আপনাকে একটি পরিবর্তনশীল তৈরি করতে হবে। উদাহরণ: {% set foo = 'http://' ~ app.request.host %}। এবং তারপর আপনি কি করতে পারেন: {{ foo | trans }}
আলেসান্দ্রো দেশান্তিস

75
এক লাইনে অনুবাদ: {{('টেস্ট_' ~ নাম) | ট্রান্স}}
জনি

6
ধন্যবাদ. সুতরাং সমস্যাটি হ'ল ফিল্টারগুলির কনকনেটেশন অপারেটরের চেয়ে বেশি অগ্রাধিকার রয়েছে।
আলেসান্দ্রো দেশানটিস

এটি ভেরিয়েবলের সাথে ফিল্টার এবং ফাংশনটি নিজেই টোকেনের {{ form_open('admin/files/?path='~file_path|urlencode)|raw }}জন্য একটি যুক্তি হিসাবে একটি ফাংশনে প্রবাহিত কনক্যাট স্ট্রিংয়ের জন্য কাজ করেছিল: অতিরিক্ত ভেরিয়েবলের প্রয়োজন নেই।
ওয়েসলি মার্চ


26

আপনি যে অপারেটরটির সন্ধান করছেন তা হলেন টিলডে (~), যেমন আলেসান্দ্রো বলেছিলেন, এবং এখানে এটি নথিতে রয়েছে:

।: সমস্ত অপারেশনগুলিকে স্ট্রিংয়ে রূপান্তর করে এবং তাদের সাথে সংযুক্ত করে। ! Hello "হ্যালো" ~ নাম ~ "!" } return ফিরে আসবে (ধরে নিলামের নাম 'জন') হ্যালো জন! - 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 }}

আপনি যদি কিছু ভেরিয়েবল একত্রিত করতে চান তবে আলেসান্দ্রো 1997 এর সমাধানটি আরও ভাল।


2
এটি আমার পক্ষে কাজ করে না, কারণ আমাকে অন্য ফিল্টার দিয়ে পুরো স্ট্রিংটি url_encode করতে হবে ...
stoefln

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

দ্রুত উত্তর (টিএল; ডিআর)

  • টুইগ স্ট্রিং কনটেনটেশন format()ফিল্টার দিয়েও করা যেতে পারে

বিস্তারিত উত্তর

প্রসঙ্গ

  • টুইগ 2.x
  • স্ট্রিং বিল্ডিং এবং কনটেনটেশন

সমস্যা

  • পরিস্থিতি: বিকাশকারী গেইলসিম টুইগের স্ট্রিং কনটেনটেশন করতে ইচ্ছুক
    • এই থ্রেডের অন্যান্য উত্তরগুলি ইতিমধ্যে কনক্যাট অপারেটরটিকে সম্বোধন করে
    • এই উত্তরটি formatফিল্টারটির উপরে কেন্দ্রীভূত হয় যা আরও প্রকাশিত

সমাধান

  • বিকল্প পদ্ধতি হল formatফিল্টারটি ব্যবহার করা
  • formatফিল্টার মত কাজ করে sprintfঅন্যান্য প্রোগ্রামিং ভাষা ফাংশন
  • formatফিল্টার আরো জটিল স্ট্রিং জন্য ~ অপারেটর কম কষ্টকর হতে পারে

Example00

  • উদাহরণস্বরূপ স্ট্রিং কনক্যাট বেয়ার

    {{"% s% s% s!" | ফর্ম্যাট ('আলফা', 'ব্র্যাভো', 'চার্লি')}
    
    --- ফলাফল --
    
    alphabravocharlie!
    
    

Example01

  • হস্তক্ষেপযুক্ত পাঠ্য সহ 010 স্ট্রিং কনক্যাট

    {{"% S এর% s মূলত% s টিতে পড়ে!" | ফর্ম্যাট ('আলফা', 'ব্র্যাভো', 'চার্লি')}}
    
    --- ফলাফল --
    
    ব্রাভোর আলফা মূলত চার্লিতে পড়ে!
    
    

Example02

  • সংখ্যার বিন্যাসের সাথে উদাহরণস্বরূপ স্ট্রিং কনক্যাট
  • sprintfঅন্যান্য ভাষার মতো একই বাক্য গঠন অনুসরণ করে

    {{"% 04dd% 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 }}"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.