13

क्या नियंत्रकों को उनकी सेवाओं पर निर्भर करने का कोई मौका नहीं है, न कि उनके अंदर सेवा कंटेनर का उपयोग करके, लेकिन शुद्ध कन्स्ट्रक्टर निर्भरता इंजेक्शन के माध्यम से? Unfortunatelly मैं देख सकता हूँ Symfony ControllerResolver ServiceContainer के माध्यम से नहीं बल्कि साधारण return new $controller कॉल के माध्यम से नियंत्रकों के नए उदाहरणों करतासिम्फनी 2: नियंत्रकों के निर्भरता इंजेक्शन (डीआई)

<?php 

class ArticleController extends \Symfony\Bundle\FrameworkBundle\Controller\Controller 
{ 
    private $articleFacade; 
    private $articleRepository; 

    public function __construct(ArticleFacade $articleFacade, ArticleRepository $articleRepository) 
    { 
     $this->articleFacade = $articleFacade; 
     $this->articleRepository = $articleRepository; 
    } 

    public function indexAction() 
    { 
     ... 
    } 

} 

:

मैं इस तरह से नियंत्रक लिखने के लिए करना चाहते हैं।

उत्तर

12

असल में वास्तव में इसकी अनुशंसा की जाती है और यदि आप FOSUser जैसे अधिकांश तृतीय पक्ष बंडलों को देखते हैं तो आप देख सकते हैं कि वे वही करते हैं जो वे करते हैं।

चाल आपके नियंत्रकों को सेवाओं के रूप में परिभाषित करना है और फिर कक्षा के नाम की बजाय सेवा आईडी का उपयोग करना है।

http://symfony.com/doc/current/cookbook/controller/service.html

ध्यान रखें कि आप ऐसी संस्था प्रबंधक के रूप में अपने सभी आवश्यक सेवाएं इंजेक्षन करना होगा रखें और आप आमतौर पर सिम्फोनी आधार वर्ग का विस्तार नहीं होगा। बेशक आप पूर्ण कंटेनर इंजेक्ट कर सकते हैं लेकिन यह फेंक दिया जाता है।

+0

आपके उत्तर के लिए धन्यवाद। –

+1

मेरे [सार कंट्रोलरबंडल] पर एक नज़र डालें (https://github.com/elnur/ElnurAbstractControllerBundle)। नियंत्रकों का उपयोग सेवाओं के रूप में सरल बनाने के लिए यह आपको एक [मूल सेवा] (http://symfony.com/doc/current/cookbook/service_container/parentservices.html) प्रदान करना है। –

+9

यह मुझे नहीं देखता है जैसे FOSUser यह करता है? क्या मैं इस बिंदु को याद कर रहा हूं? वैक्लाव का सवाल उन्हें कन्स्ट्रक्टर विधि के माध्यम से इंजेक्शन देने के बारे में था, जबकि FOSUser $-- कंटेनर-> प्राप्त करें ('सेवा'); https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Controller/RegistrationController.php – Steve