मेरे पास FooService
है जो किसी अन्य कॉन्फ़िगरेशन सेवा से कुछ डेटा प्राप्त करता है।सेवा के विधि परिणाम को किसी अन्य सेवा के लिए तर्क के रूप में कैसे इंजेक्ट करें?
मेरे पास कॉन्फ़िगरेशन सेवा है क्योंकि अनुरोध डेटा के आधार पर कॉन्फ़िगर अलग है। कॉन्फ़िगरेशन सेवा में RequestStack
इंजेक्शन है और प्रासंगिक कॉन्फ़िगरेशन सरणी बनाता है।
class Foo
{
private $config;
/**
* @param Config $config
*/
public function __construct(Config $config) {
$this->config = $config->getData();
}
}
फिर भी सेवा इंजेक्शन लगाने के बजाय, मैं getData
का एकमात्र तरीका कॉल परिणाम इंजेक्षन करना पसंद करते हैं, के रूप में यह इकाई परीक्षण के लिए सरल है:
मेरे FooService
इस प्रकार लग रहा है। मुझे कॉन्फ़िगर करने की आवश्यकता नहीं होगी, मैं सिर्फ एक सरणी पास कर सकता हूं।
foo:
class: Kopernikus\LeBundle\Service\Foo
arguments:
- [@config, getData]
अभी तक यह भी पूरी सेवा injects:
config:
...
foo:
class: Kopernikus\LeBundle\Service\Foo
arguments:
- @config
मैं के माध्यम से कारखाने तरीकों के लिए की तरह मेरे foo
परिभाषा को बदलने की कोशिश की:
मेरे वर्तमान service.yml
एक परिभाषा की तरह है।
किसी अन्य सेवा के लिए तर्क के रूप में सेवा के विधि परिणाम को इंजेक्ट कैसे करें?
ब्रैकेट बहुत अधिक हैं, क्योंकि वे एक सरणी की सरणी इंजेक्ट करते हैं। बस '" @ = सेवा ('कॉन्फ़िगरेशन')। GetData() "पर्याप्त है। =) – k0pernikus
इसे संस्करण [3] के बाद [http://symfony.com/doc/3.3/service_container/expression_language.html) स्थानांतरित कर दिया गया है ** ** – Trix