2013-12-07 6 views
33

मैंने इसे Google पर करने का प्रयास किया लेकिन विस्तृत जानकारी नहीं मिली।लार्वेल 4 - सेवा प्रदाताओं का उपयोग कब करें?

सेवा प्रदाता एक ही स्थान पर संबंधित आईओसी पंजीकरण समूह के लिए एक शानदार तरीका है। अपने आवेदन में बूटस्ट्रैप घटकों को बूट करने के तरीके के बारे में सोचें।

दस्तावेज़ीकरण से समझ में नहीं आता है। क्या यह केवल तभी जरूरी है जब मैं पैकेज बनाऊं? तो जब मैं नियमित डेवलपर हूं और सार्वजनिक रूप से रिलीज करने के लिए कुछ पैकेज नहीं बना रहा हूं - मुझे परवाह करने की आवश्यकता नहीं है?

उत्तर

7

कोई सेवा प्रदाता ऐसा नहीं कर सकता है कि आप केवल ऐप/स्टार्ट/ग्लोबल.एफ़पी में नहीं जा सकते हैं, लेकिन एक सेवा प्रदाता के साथ आप एक ही स्थान पर सभी तर्क इकट्ठा करते हैं और अधिक मॉड्यूलर फैशन में एप्लिकेशन विकसित कर सकते हैं।

यदि आप एक पैकेज बना रहे हैं तो एक सेवा प्रदाता काफी जरूरी है।

+0

हम्म, मैं 1 महीने या उससे अधिक के लिए लार्वेल के साथ काम करता हूं और मुझे ऐप/स्टार्ट/global.php –

+0

@ SPeed_FANat1c में डालकर याद नहीं आया, जहां आपने उन्हें रखा था? 'Routes.php'? यदि आप एसपी के –

+0

का उपयोग नहीं कर रहे हैं, तो "start/global.php' उनके लिए एक और अधिक तार्किक स्थान होगा" आप उन्हें कहां रखा था "मुझे बिल्कुल यकीन नहीं है कि आप उन्हें 'शब्द' से क्या मतलब रखते हैं। क्या आप आईओसी पंजीकरण के बारे में बात कर रहे हैं? मैं उनका उपयोग नहीं करता हूं। जब मैं आईओसी चाहता हूं तो मैं केवल रचनात्मक मानकों में डालता हूं: __contruct (कक्षा $ कक्षाएं, कक्षा 1 $ कक्षा 1) <- इस –

1

लार्वेल में, सेवा प्रदाता सीधे आईओसी कंटेनर के तरीके से संबंधित हैं। वे निर्भरताओं के लिए आसान और अधिक मॉड्यूलर दृष्टिकोण की अनुमति देते हैं। वास्तव में, यह आपके कोड को बूटस्ट्रैप फैशन (यहां तक ​​कि लार्वेल के बाहर भी) में व्यवस्थित करने के लिए एक शानदार पैटर्न है। मुझे लगता है कि यदि आप नियमित डेवलपर हैं तो आपको अभी भी लैरवेल सेवा प्रदाताओं की मूल बातें जाननी चाहिए, क्योंकि यह पैटर्न लैरवेल वास्तुकला का अभिन्न हिस्सा है। मुझे यकीन है कि यह आपके काम को आसान बना सकता है। उदाहरण के लिए, पैकेज स्थापित करते समय, आपको उस पैकेज तक एप्लिकेशन पहुंच देना होगा - सबसे अच्छा समाधान सेवा प्रदाताओं की सूची और एक मुखौटा के माध्यम से होता है। दूसरी तरफ, मैं एसपी-एस की मूल बातें जानने के बिना लार्वा डेवलपर को मधुमक्खियों की कल्पना नहीं कर सकता।

63

एक अच्छी तरह से architected Laravel आवेदन के निर्माण के लिए कुंजी में से एक एक संगठनात्मक उपकरण के रूप में उपयोग करने के लिए serviceproviders सीखने है। जब आप आईओसी कंटेनर के साथ कई कक्षाओं को पंजीकृत करते हैं, तो उन सभी बाइंडिंग आपके ऐप/स्टार्ट फाइलों को अव्यवस्थित करना शुरू कर सकते हैं। उन फ़ाइलों में कंटेनर पंजीकरण करने के बजाय, सेवा प्रदाता बनाएं जो संबंधित सेवाओं को पंजीकृत करते हैं।

तो, यह एक और स्थान पर इसे व्यवस्थित रखने के लिए एक ही स्थान पर व्यवस्थित करने का एक तरीका है। एक सेवा प्रदाता के पास कम से कम एक विधि होनी चाहिए: पंजीकरण करें। रजिस्टर विधि वह जगह है जहां प्रदाता कक्षाओं को कंटेनर से बांधता है।एक अनुरोध आपके आवेदन में प्रवेश करती है और ढांचे बूट किया जाता है, रजिस्टर विधि आपके विन्यास फ़ाइल में सूचीबद्ध प्रदाताओं पर कहा जाता है

'providers' => array(
    'Illuminate\Foundation\Providers\ArtisanServiceProvider', 
    'Illuminate\Auth\AuthServiceProvider', 
    'Illuminate\Cache\CacheServiceProvider', 
    // more ... 
    'Illuminate\Html\HtmlServiceProvider', 
    // more ... 
) 

यह app.php कॉन्फ़िग फ़ाइल में प्रदाताओं सरणी है और इस HtmlServiceProvider'Illuminate\Html\HtmlServiceProvider.php'

में जमा हो जाती है
use Illuminate\Support\ServiceProvider; 
    class HtmlServiceProvider extends ServiceProvider { 

    //... 
    public function register() 
    { 
     $this->registerHtmlBuilder(); 

     $this->registerFormBuilder(); 
    } 

    protected function registerHtmlBuilder() 
    { 
     $this->app['html'] = $this->app->share(function($app) 
     { 
      return new HtmlBuilder($app['url']); 
     }); 
    } 

    protected function registerFormBuilder() 
    { 
     $this->app['form'] = $this->app->share(function($app) 
     { 
      $form = new FormBuilder($app['html'], $app['url'], $app['session']->getToken()); 
      return $form->setSessionStore($app['session']); 
     }); 
    } 

} 

है, Laravel बूट, यह इस (register) प्रणाली को बुलाती है और इस विधि में दो लाइनों देखते हैं, इन लाइन दो तरीकों, registerHtmlBuilder() और registerFormBuilder(), इन दोनों तरीकों घटकों 0,123,009 करने के लिए कॉलकंटेनर

$this->app['html'] = $this->app->share(...); 
$this->app['form'] = $this->app->share(...); 

का उपयोग कर इस मामले में दोनों गुमनाम कार्य करता है जो html/form वर्ग का एक उदाहरण देता है और है कि कर रहे हैं यही कारण है कि, जब आप

Html::link(...); 

का उपयोग या, प्रपत्र

का उपयोग कर
Form::input(...); 

आप $app ऑब्जेक्ट से बाध्य वर्ग प्राप्त करें जो आपके आवेदन के लिए उपलब्ध है। इस मामले में 'Html' => 'Illuminate\Support\Facades\Html',app.php फ़ाइल में aliases सरणी में मुख्य श्रेणी को उपनाम करने के लिए उपयोग किया जाता है।

तो, Laravel में, सेवा प्रदाताओं बूट अप आपके आवेदन की प्रक्रिया के दौरान, एक अच्छा क्लीनर तरीके से काम को व्यवस्थित करने के लिए एक तरह से कर रहे हैं, Laravel रन सभी सेवा प्रदाताओं से सभी register तरीकों इसलिए प्रत्येक घटक उपलब्ध हो जाते हैं (बाध्य) IoC कंटेनर पर ताकि आप उन्हें अपने एप्लिकेशन में एक्सेस कर सकें।

यह उल्लेखनीय है कि सेवा प्रदाताओं से सभी register विधियों को कॉल करने के बाद उन सभी सेवा प्रदाताओं से boot विधियों को बुलाया जाता है। उस स्थिति में, यदि आपको सेवा प्रदाता कक्षा के भीतर एप्लिकेशन (आईओसी/सेवा कंटेनर) से किसी भी सेवा का उपयोग करने की आवश्यकता है तो आपको बूट सेवा से उस सेवा का उपयोग करना चाहिए क्योंकि यह गारंटी नहीं है कि सेवा प्रदाताओं के पंजीकरण के दौरान कोई भी सेवा उपलब्ध है (रजिस्टर विधि के भीतर) क्योंकि सेवा प्रत्येक सेवा प्रदाता के register विधि के माध्यम से पंजीकृत होती है लेकिन boot विधि के भीतर आप किसी भी सेवा का उपयोग कर सकते हैं क्योंकि तब तक प्रत्येक सेवा उम्मीदपूर्वक पंजीकृत होती है।

यह उत्तर Laravel 4 : How are Facades resolved? भी देखें, यह आपको समझने में मदद कर सकता है।

+3

सेवा प्रदाता और फेकाड्स (लिंक किए गए SO उत्तर में) दोनों का बहुत अच्छा, सरल स्पष्टीकरण। वास्तव में आधिकारिक दस्तावेज़ों का हिस्सा होना चाहिए – Ben

+0

अंगूठे के लिए धन्यवाद :-) –

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