2012-01-21 14 views
5

मैं अपने Symfony2 परियोजना में एक नियमित रूप से वर्ग है:सेवाएं एक्सेस

class RangeColumn extends Column{ 
     //... 
    } 

अब अंदर इस वर्ग के एक समारोह प्रस्तुत करना, जिसमें मैं टहनी या Symfony2 की अनुवाद सेवा का उपयोग करना चाहते हैं एक विशिष्ट टेम्पलेट प्रस्तुत करने के लिए। मैं इस सेवाओं को उचित तरीके से कैसे एक्सेस करूं?

उत्तर

10

उपयोग dependency injection। यह वास्तव में एक साधारण अवधारणा है।

आप बस अपनी कक्षा में (इंजेक्षन) आवश्यक सेवाएं पास करना चाहिए।

निर्भरता अनिवार्य हैं उन्हें एक निर्माता में गुजरती हैं। यदि वे वैकल्पिकसेटर्स का उपयोग करते हैं।

आप आगे जाने के लिए और निर्भरता इंजेक्शन कंटेनर (इसे से बाहर एक सेवा कर) के लिए अपने वर्ग के निर्माण के प्रतिनिधि हो सकता है।

सेवाएं अपने "नियमित" वर्ग से अलग नहीं कर रहे हैं। यह सिर्फ इतना है कि उनका निर्माण कंटेनर को सौंपा गया है।

11

कोड उदाहरण:

<?php 

class MyRegularClass 
{ 
    private $translator; 

    public function __construct(Translator $translator) 
    { 
     $this->translator = $translator; 
    } 

    public function myFunction() 
    { 
     $this->translator->trans('sentence_to_translate'); 
    } 
} 

और अगर आप अपने वर्ग के लिए एक सेवा बनना चाहते हैं: अपने services.yml अपने बंडल में स्थित फ़ाइल में

parameters: 
    my_regular_class.class: Vendor\MyBundle\Classes\MyRegularClass 

services: 
    mybundle.classes.my_regular_class: 
     class: %my_regular_class.class% 
     arguments: [@translator] 

अधिक जानकारी के लिए, देखें Symfony2 Service Container

+2

निर्भरता इंजेक्शन टैग के बारे में अध्याय Symfony 2.6 द्वारा '@ translator.default' है,' @ translator' टैग अब LoggingTranslator को दर्शाता है। – Lashae

संबंधित मुद्दे