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