Symfony2 টুইগ টেম্পলেটগুলিতে কীভাবে কনফিগার প্যারামিটার পাবেন


170

আমার একটি সাইফনি 2 টিভিগ টেম্পলেট রয়েছে। আমি এই টুইগ টেম্পলেটটিতে একটি কনফিগার প্যারামিটারের মান আউটপুট করতে চাই (একটি সংস্করণ নম্বর)। অতএব আমি কনফিগার প্যারামিটারটিকে এর মতো সংজ্ঞায়িত করেছি:

parameters:
    app.version: 0.1.0

আমি কন্ট্রোলারগুলিতে এই কনফিগার প্যারামিটারটি ব্যবহার করতে সক্ষম তবে এটি আমার টুইগ টেমপ্লেটে কীভাবে পাবেন তা সম্পর্কে আমার কোনও ধারণা নেই।

উত্তর:


406

আপনি কনফিগারেশনের ট্যুইগ গ্লোবাল বিভাগে প্যারামিটার বিকল্প ব্যবহার করতে পারেন :

প্যারামিটার কনফিগারেশন:

parameters:
    app.version: 0.1.0

টুইগ কনফিগারেশন:

twig:
    globals:
        version: '%app.version%'

ট্যুইগ টেম্পলেট:

{{ version }}

এই পদ্ধতিটি আপনাকে ContainerAwareক্লাসেও প্যারামিটারটি ব্যবহার করার অনুমতি দেওয়ার সুবিধা প্রদান করে:

$container->getParameter('app.version');

ভাল উত্তর. সংযোজন: যেহেতু সিমফনি 3.1 একটি ভেরিয়েবল উদ্ধৃত করা আবশ্যক: "% app.version%"
— বিজেজে

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

2
এটি অবশ্যই গ্রহণযোগ্য উত্তর হওয়া উচিত। ধন্যবাদ!
— সিরিল

191

সহজেই, আপনি আপনার কনফিগারেশন ফাইলটিতে সংজ্ঞা দিতে পারেন:

twig:
    globals:
        version: "0.1.0"

এবং এটির সাথে আপনার টেমপ্লেটে অ্যাক্সেস করুন

{{ version }}

অন্যথায় এটি আপনার প্যারামিটারগুলি প্রকাশ করার জন্য একটি ট্যুইগ এক্সটেনশন সহ একটি উপায় হতে হবে।


28
@ রিল বুঝিয়ে দেওয়ার মত এটি পরামিতিগুলিতে সেট করা আরও ভাল।
— মিঃগ্লাস 21

89

আপনি বিল্ট ইন সার্ভিস প্যারামিটার সিস্টেমের সুবিধাও নিতে পারেন, যা আপনাকে মানটি আলাদা করতে বা পুনরায় ব্যবহার করতে দেয়:

# app/config/parameters.yml
parameters:
    ga_tracking: UA-xxxxx-x

# app/config/config.yml
twig:
    globals:
        ga_tracking: "%ga_tracking%"

এখন, ভেরিয়েবল ga_tracking সমস্ত টুইগ টেম্পলেটগুলিতে পাওয়া যায়:

<p>The google tracking code is: {{ ga_tracking }}</p>

নিয়ামকদের ভিতরে প্যারামিটারটি উপলব্ধ:

$this->container->getParameter('ga_tracking');

আপনি একটি গ্লোবাল টুইগ ভেরিয়েবল (Symfony2.2 +) হিসাবে একটি পরিষেবাও সংজ্ঞায়িত করতে পারেন:

# app/config/config.yml
twig:
    # ...
    globals:
        user_management: "@acme_user.user_management"

http://symfony.com/doc/current/templating/global_variables.html

আপনি যে বিশ্বব্যাপী ভেরিয়েবলটি সেট করতে চান তা যদি আরও জটিল হয় - কোনও বস্তু বলুন - তবে আপনি উপরের পদ্ধতিটি ব্যবহার করতে সক্ষম হবেন না। পরিবর্তে, আপনাকে একটি টুইগ এক্সটেনশন তৈরি করতে হবে এবং getGlobals পদ্ধতিতে প্রবেশকারীগুলির মধ্যে একটি হিসাবে গ্লোবাল ভেরিয়েবলটি ফিরিয়ে আনতে হবে।


5
এটি সেরা সমাধানের মতো দেখায় কারণ এটি সিস্টেমের সমস্ত জ্ঞানকে একসাথে রাখে।
— জোনিস গ্রুজিস

19

সিমফনি 2 (এর parameters.ymlপরিবর্তে ব্যবহার করে parameters.ini) এর নতুন সংস্করণগুলিতে আপনি কী-মান জোড়ার পরিবর্তে বস্তু বা অ্যারে সঞ্চয় করতে পারেন, যাতে আপনি আপনার গ্লোবালগুলি এভাবে পরিচালনা করতে পারেন:

config.yml (শুধুমাত্র একবার সম্পাদিত):

# app/config/config.yml
twig:
  globals:
    project: %project%

parameters.yml:

# app/config/parameters.yml
project:
  name:       myproject.com
  version:    1.1.42

এবং তারপরে একটি দ্বিগুণ ফাইলের মধ্যে আপনি ব্যবহার করতে পারেন {{ project.version }}বা {{ project.name }}।

দ্রষ্টব্য: আমি ব্যক্তিগতভাবে জিনিসগুলি যুক্ত করা অপছন্দ করি app , কারণ এটি সিমফোনির পরিবর্তনশীল এবং ভবিষ্যতে সেখানে কী সংরক্ষণ করা হবে তা আমি জানি না।


16

উপরোক্ত উত্তরগুলি সঠিক এবং কার্যকর কাজ করে। আমি অন্যভাবে ব্যবহার করেছি।

config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: app.yml }
    - { resource: app_twig.yml }

app.yml

parameters:
  app.version:           1.0.1

app_twig.yml

twig:
  globals:
    version: %app.version%

ভিতরে নিয়ামক:

$application_version = $this->container->getParameter('app.version');
// Here using app.yml

ভিতরে টেমপ্লেট / টুইগ ফাইল:

Project version {{ version }}!
{#  Here using app_twig.yml content.  #}
{#  Because in controller we used $application_version  #}

নিয়ামক আউটপুট ব্যবহার করতে:

নিয়ন্ত্রক:

public function indexAction() {
        $application_version = $this->container->getParameter('app.version');
        return array('app_version' => $application_version);
    }

টেমপ্লেট / টুইগ ফাইল:

Project version {{ app_version }}

আমি আরও ভাল বোঝার জন্য বিভিন্ন উল্লেখ করেছি।


1
হ্যাঁ দুর্দান্ত, এই উত্তরটি খুব ভালভাবেই দুটি উপায় ব্যাখ্যা করে: নিয়ামকের মধ্য দিয়ে চলে যাওয়া এবং এটি একটি বৈশ্বিক দ্বৈত ভেরিয়েবল হিসাবে পাস করা! +1
— গটলিয়েব নটসনাবল

12

একটি টুইগ এক্সটেনশনের সাহায্যে আপনি একটি parameterটুইগ ফাংশন তৈরি করতে পারেন :

{{ parameter('jira_host') }}

TwigExtension.php:

class TwigExtension extends \Twig_Extension
{
    public $container;

    public function getFunctions()
    {
        return [
            new \Twig_SimpleFunction('parameter', function($name)
            {
                return $this->container->getParameter($name);
            })
        ];
    }


    /**
     * Returns the name of the extension.
     *
     * @return string The extension name
     */
    public function getName()
    {
        return 'iz';
    }
}

service.yml:

  iz.twig.extension:
    class: IzBundle\Services\TwigExtension
    properties:
      container: "@service_container"
    tags:
      - { name: twig.extension }

এর জন্য ধন্যবাদ, আমি উদ্বিগ্ন ছিলাম আমাকে পরামিতি ফাইল থেকে পাতাগুলি দ্বিগুণ করতে হবে glo
— জো ইয়াহছুচি

দুর্দান্ত, তবে এটি কোনও প্যারামিটারের জন্য এক্সটেনশনে অযৌক্তিক ওভারলোড পুরো কন্টেইনারটি নয়?
— লাজডেক মারেক

আমি সিম্ফনি 2 এর সাথে বিশ্বাস করি, আপনি ধারক প্যারামিটারগুলি ইনজেক্ট করতে পারবেন না (যা এখন সিমফনি 4/5 দিয়ে সম্ভব)
— টমাস ডিকাক্স

1

$this->getParameter('app.version')পরমকে পাতলা করার জন্য আপনি কেবল নিয়ামককে আবদ্ধ করতে পারেন এবং তারপরে এটি রেন্ডার করতে পারেন।


-3

কনফাইং.আইএমএল-তে

# app/config/config.yml
twig:
  globals:
    version: '%app.version%'

টুইগ ভিউতে

# twig view
{{ version }}

2
পুরো পরিষেবা ধারককে অ্যাক্সেস দেওয়া ভাল ধারণা নয়। কনটেইনারটি একটি সার্ভিস লোকেটার এবং এটি নির্ভরতা ইনজেকশন দিয়েও ইনজেকশন করা উচিত নয়, তাই
— দুটোই নয়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.