Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)
यदि आप कभी भी Laravel फ़्रेमवर्क में आए हैं, तो यह बिलकुल न के बराबर संभावना है कि आपने सर्विस कंटेनरों और सर्विस प्रोवाइडर्स के बारे में नहीं सुना है। वास्तव में, वे Laravel फ़्रेमवर्क की रीढ़ हैं और जब आप किसी भी Laravel एप्लिकेशन का उदाहरण पेश करते हैं तो यह सभी भारी भार उठाते हैं।
इस आर्टिकल में, हम इस बारे में एक झलक देते हैं कि सर्विस कंटेनर आखिर होता क्या है, और इसके बाद हम सर्विस प्रोवाइडर पर विस्तार से चर्चा करेंगे। इस आर्टिकल के पाठ्यक्रम में, मैं यह भी प्रदर्शित करूँगा कि कैसे Laravel में एक कस्टम सर्विस प्रोवाइडर बनाते है। एक बार जब आप एक सर्विस प्रोवाइडर बनाते हैं, तो आपको इसका उपयोग करने के लिए Laravel एप्लिकेशन के साथ भी रजिस्टर करना होगा, इसलिए हम उस माध्यम से भी जायेंगे।
दो महत्वपूर्ण तरीके हैं, बूट और रजिस्टर, जो कि आपका सर्विस प्रोवाइडर इम्प्लीमेंट कर सकता है, और इस लेख के अंतिम सेगमेंट में हम इन दो विधियों को अच्छी तरह से चर्चा करेंगे।
इससे पहले कि हम किसी सर्विस प्रोवाइडर की चर्चा में डुबकी लगाएं, मैं सर्विस कंटेनर को शुरू करने का प्रयास करूंगा क्योंकि यह आपके सर्विस प्रोवाइडर इम्प्लीमेंटेशन में भारी इस्तेमाल किया जाएगा।
सर्विस कंटेनर और सर्विस प्रोवाइडर को समझें
एक सर्विस कंटेनर क्या है?
सरल शब्दों में, हम यह कह सकते हैं कि Laravel में सर्विस कंटेनर एक बॉक्स है जिसमें विभिन्न कंपोनेंट्स के बाइंडिंग होते हैं, और उन्हें पूरे एप्लीकेशन में आवश्यकतानुसार सर्व किया जाता है।
आधिकारिक Laravel डॉक्यूमेंटेशन के शब्दों में:
Laravel सर्विस कंटेनर class dependencies के मैनेजिंग और डिपेंडेंसी इंजेक्शन परफॉर्म करने के लिए एक शक्तिशाली टूल है।
इसलिए, जब भी आपको किसी बिल्ट-इन कॉम्पोनेन्ट या सर्विस को इंजेक्ट करने की आवश्यकता होती है, तो आप इसे अपने कन्स्ट्रक्टर या मेथड में लिख सकते हैं, और इसे सर्विस कंटेनर से ऑटोमेटिकली इंजेक्ट किया जाएगा क्योंकि इसमें आपकी ज़रूरत का सब कुछ है! क्या यह कूल नहीं है? यह आपको मैन्युअल रूप से कॉम्पोनेन्ट को इनस्टॉल करने से बचाता है और इस प्रकार आपके कोड टाइट कपलिंग से बचा जाता है।
इसे समझने के लिए एक क्विक उदाहरण देखें।
Class SomeClass { public function __construct(FooBar $foobarObject) { // use $foobarObject object } }
जैसा कि आप देख सकते हैं, SomeClass
को अपने आप को instantiate करने के लिए FooBar
के एक इंस्टैंस की आवश्यकता है। इसलिए, मूलतः, इसमें एक डिपेंडेंसी है जिसे इंजेक्ट किये जाने की आवश्यकता है। Laravel सर्विस कंटेनर में देखकर और उचित डिपेंडेंसी को इंजेक्शन करके ऑटोमेटिकली करता है।
और अगर आप सोच रहे हैं कि कैसे Laravel जानता है कि सर्विस कंटेनर में किन कंपोनेंट्स या सर्विसेज को शामिल करना है, तो उत्तर सर्विस प्रोवाइडर है। यह सर्विस प्रोवाइडर है जो सर्विस कंटेनर में विभिन्न कंपोनेंट्स को बांधने के लिए Laravel को बताता है। वास्तव में, इसे सर्विस कंटेनर बाइंडिंग कहा जाता है, और आपको इसे सर्विस प्रोवाइडर के माध्यम से करना होगा।
इसलिए यह सर्विस प्रोवाइडर है जो सभी सर्विस कंटेनर बाइंडिंग रजिस्टर करता है, और यह सर्विस प्रोवाइडर इम्प्लीमेंटेशन के रजिस्टर मेथड के माध्यम से किया जाता है।
टेबल पर एक और सवाल लाना चाहिए: Laravel को कैसे विभिन्न सर्विस प्रोवाइडर्स के बारे में पता है? क्या आपने अभी कुछ कहा है? मैंने अभी किसी को यह कहते हुए सुना है कि, Laravel को स्वयं को भी यह समझना चाहिए! ओह बॉय, यह पूछने के लिए बहुत कुछ है: Laravel एक फ्रेमवर्क है जो सुपरमैन नहीं है, है ना? मजाक को अलग करें, ऐसा कुछ है जो आपको स्पष्ट रूप से Laravel को सूचित करने की ज़रूरत है।
आगे बढ़ो और config/app.php
फ़ाइल के कंटेंट को देखें। आपको एक ऐरे एंट्री मिलेगी जो कि सभी सर्विस प्रोवाइडर्स को लिस्ट करती है जो कि Laravel एप्लिकेशन के बूटस्ट्रिपिंग के दौरान लोड हो जाएंगी।
'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, /* * Package Service Providers... */ Laravel\Tinker\TinkerServiceProvider::class, /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, ],
इसलिए, यह आपके डिस्पोजल में सर्विस कंटेनर था। अगले सेक्शन से, हम सर्विस प्रोवाइडर पर ध्यान देंगे, जो इस आर्टिकल का मुख्य विषय है!
सर्विस प्रोवाइडर क्या है?
यदि सर्विस कंटेनर कुछ है जो आपको बाइंडिंग को परिभाषित करने और इंजेक्ट डिपेंडेंसी डिफाइन करने की अनुमति देता है, तो सर्विस प्रोवाइडर वह जगह है जहां यह होता है।
यह समझने के लिए कि यह क्या करता है, कोर सर्विस प्रोवाइडर्स में से एक पर जल्दी से एक नज़र डालते है। आगे बढ़ो और vender/laravel/framework/src/Illuminate/Cache/CacheServiceProvider.php
फ़ाइल खोलें।
public function register() { $this->app->singleton('cache', function ($app) { return new CacheManager($app); }); $this->app->singleton('cache.store', function ($app) { return $app['cache']->driver(); }); $this->app->singleton('memcached.connector', function () { return new MemcachedConnector; }); }
यहां नोट करने के लिए महत्वपूर्ण बात यह है कि आप रजिस्टर
मेथड को सर्विस कन्टेनर बाइंडिंग को डिफाइन करने की अनुमति देते हैं। जैसा कि आप देख सकते हैं, cache
, cache.store
और memcached.connector
सर्विसेज के लिए तीन बाइंडिंग हैं।
असल में, हम Laravel को सूचित कर रहे हैं कि जब भी cache
एंट्री को हल करने की आवश्यकता होती है, तो उसे CacheManager
के इंस्टैंस को रीटर्न करना चाहिए। इसलिए हम सर्विस कंटेनर में बस एक प्रकार की मैपिंग जोड़ रहे हैं जिसे $this->app
के माध्यम से एक्सेस किया जा सकता है।
Laravel सर्विस कंटेनर में किसी भी सर्विस को जोड़ने का यह उचित तरीका है। यह आपको Laravel के सभी सर्विस प्रोवाइडर्स के रजिस्टर मेथड के माध्यम से कैसे चलाता है और सेवा कंटेनर को प्रदर्शित करता है की बड़ी तस्वीर को समझने की अनुमति देता है! और जैसा कि हमने पहले उल्लेख किया है, यह config/app.php
फ़ाइल से सर्विस प्रोवाइडर्स की लिस्ट को चुनता है।
और यह ही सर्विस प्रोवाइडर की कहानी है। अगले सेक्शन में, हम एक कस्टम सर्विस प्रोवाइडर बनाने के बारे में चर्चा करेंगे ताकि आप अपनी कस्टम सर्विसेज को Laravel सर्विस कंटेनर में रजिस्टर कर सकें।
अपना कस्टम सर्विस प्रोवाइडर बनाएं
Laravel पहले से ही हैंड्स-ऑन कमांड-लाइन यूटिलिटी टूल, artisan
के साथ आता है, जो आपको टेम्पलेट कोड बनाने की अनुमति देता है ताकि आप इसे स्क्रैच से न बनाएं। आगे बढ़ो और कमांड लाइन पर जाओ और एक कस्टम सर्विस प्रोवाइडर बनाने के लिए अपने एप्लिकेशन रूट में निम्न कमांड चलाएं।
$php artisan make:provider EnvatoCustomServiceProvider Provider created successfully.
और इसे app/Providers
डायरेक्टरी के अंदर EnvatoCustomServiceProvider.php
फाइल बनानी चाहिए। यह देखने के लिए फ़ाइल खोलें कि यह कैसा है।
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; class EnvatoCustomServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { // } }
जैसा कि हमने पहले चर्चा की थी, वहां दो तरीके हैं, बूट और रजिस्टर, जिनसे आपका अपने कस्टम सर्विस प्रोवाइडर को बनाते समय बहुत बार सामना होगा।
register
मेथड वह जगह है जहां आप अपने सभी कस्टम सर्विस कंटेनर बाइंडिंग को डिफाइन करते हैं। दूसरी तरफ, boot
मेथड वह जगह है जहां आप रजिस्टर मेथड के माध्यम से पहले से ही रजिस्टर सर्विसेज का उपभोग कर सकते हैं। इस आर्टिकल के अंतिम सेगमेंट में, हम इन दो मेथड्स पर विस्तार से चर्चा करेंगे क्योंकि हम कुछ प्रैक्टिकल यूज़ मामलों के माध्यम से दोनों मेथड्स के उपयोग को समझने के लिए जायेंगे।
अपने कस्टम सर्विस प्रोवाइडर को रजिस्टर करें
तो आपने अपना कस्टम सर्विस प्रोवाइडर बनाया है एक दम बढ़िया! इसके बाद, आपको अपने कस्टम सर्विस प्रोवाइडर के बारे में Laravel को सूचित करना होगा ताकि वह बूटस्ट्रैप के दौरान अन्य सर्विस प्रोवाइडर के साथ इसे लोड कर सके।
अपने सर्विस प्रोवाइडर को रजिस्टर करने के लिए, आपको config/app.php
फ़ाइल में सर्विस प्रोवाइडर के ऐरे (array) में एक एंट्री जोड़नी होगी।
'providers' => [ /* * Laravel Framework Service Providers... */ Illuminate\Auth\AuthServiceProvider::class, Illuminate\Broadcasting\BroadcastServiceProvider::class, Illuminate\Bus\BusServiceProvider::class, Illuminate\Cache\CacheServiceProvider::class, Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, Illuminate\Cookie\CookieServiceProvider::class, Illuminate\Database\DatabaseServiceProvider::class, Illuminate\Encryption\EncryptionServiceProvider::class, Illuminate\Filesystem\FilesystemServiceProvider::class, Illuminate\Foundation\Providers\FoundationServiceProvider::class, Illuminate\Hashing\HashServiceProvider::class, Illuminate\Mail\MailServiceProvider::class, Illuminate\Notifications\NotificationServiceProvider::class, Illuminate\Pagination\PaginationServiceProvider::class, Illuminate\Pipeline\PipelineServiceProvider::class, Illuminate\Queue\QueueServiceProvider::class, Illuminate\Redis\RedisServiceProvider::class, Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, Illuminate\Session\SessionServiceProvider::class, Illuminate\Translation\TranslationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class, Illuminate\View\ViewServiceProvider::class, /* * Package Service Providers... */ Laravel\Tinker\TinkerServiceProvider::class, /* * Application Service Providers... */ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, // App\Providers\BroadcastServiceProvider::class, App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\EnvatoCustomServiceProvider::class, ],
और बस! आपने अपने सर्विस प्रोवाइडर को Laravel की चीजों की स्कीम के साथ रजिस्टर किया है! लेकिन हमारे द्वारा बनाई गई सर्विस प्रोवाइडर लगभग एक रिक्त टेम्पलेट है और फिलहाल इसका कोई फायदा नहीं है। अगले सेक्शन में, हम कुछ प्रैक्टिकल उदाहरणों के माध्यम से देखेंगे कि आप रजिस्टर और बूट मेथड्स के साथ क्या कर सकते हैं।
रजिस्टर और बूट मेथड्स के माध्यम से जाओ
शुरू करने के लिए, हम यह जानने के लिए register
मेथड के माध्यम से जाएंगे कि आप वास्तव में इसका उपयोग कैसे कर सकते हैं। सर्विस प्रोवाइडर फ़ाइल app/Providers/EnvatoCustomServiceProvider.php
खोलें जो पहले बनायीं गयी थी और मौजूदा कोड को निम्नलिखित के साथ बदलें।
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Library\Services\DemoOne; class EnvatoCustomServiceProvider extends ServiceProvider { public function boot() { } public function register() { $this->app->bind('App\Library\Services\DemoOne', function ($app) { return new DemoOne(); }); } }
यहां नोट करने के लिए दो महत्वपूर्ण बातें हैं:
- हमने
app\Library\Services\DemoOne
को आयात किया है ताकि हम उसका इस्तेमाल कर सकें।DemoOne
क्लास अभी तक नहीं बनायीं गयी है, लेकिन हम एक क्षण में ऐसा करेंगे। - रजिस्टर मेथड में, हमने सर्विस कंटेनर के
bind
मेथड का उपयोग हमारी सर्विस कंटेनर बाइंडिंग को जोड़ने के लिए किया है। इसलिए, जब भीapp\Library\Services\DemoOne
डिपेंडेंसी को हल करने की जरूरत होती है, तो यह क्लोजर फंक्शन को कॉल करता है, और यहapp\Library\Services\DemoOne
ऑब्जेक्ट को आरम्भ करता है और return करता है।
इसलिए आपको इस पर काम करने के लिए app/Library/Services/DemoOne.php
फाइल बनाने की जरूरत है।
<?php namespace App\Library\Services; class DemoOne { public function doSomethingUseful() { return 'Output from DemoOne'; } }
और यहाँ कोड है जो कहीं आपके controller में है जहां डिपेंडेंसी इंजेक्ट होगी।
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use App\Library\Services\DemoOne; class TestController extends Controller { public function index(DemoOne $customServiceInstance) { echo $customServiceInstance->doSomethingUseful(); } }
यह एक class को bind करने का एक बहुत सरल उदाहरण है। वास्तव में, उपरोक्त उदाहरण में, सर्विस प्रोवाइडर बनाने और रजिस्टर मेथड को लागू करने की कोई आवश्यकता नहीं है जैसा कि हमने किया था, चूंकि Laravel स्वतः रिफ्लेक्शन के द्वारा इसे हल कर सकता है।
Laravel डॉक्यूमेंटेशन से एक बहुत ही महत्वपूर्ण नोट:
कंटेनर में क्लासेज bind करने की कोई आवश्यकता नहीं है अगर वे किसी भी इंटरफेस पर निर्भर नहीं करते हैं। कंटेनर को ये ऑब्जेक्ट बनाने के तरीके के बारे में इंस्ट्रक्शन देने की ज़रूरत नहीं है, क्योंकि यह स्वचालित रूप से रिफ्लेक्शन का उपयोग करके इन ऑब्जेक्ट को हल कर सकता है।
दूसरी ओर, यह वास्तव में उपयोगी होगा यदि आपके पास एक निश्चित इम्प्लीमेंटेशन के लिए एक इंटरफ़ेस हो। इसे समझने के लिए एक उदाहरण के माध्यम से चलें।
चलो app/Library/Services/Contracts/CustomServiceInterface.php
में एक बहुत सरल इंटरफ़ेस बनाते हैं।
<?php // app/Library/Services/Contracts/CustomServiceInterface.php namespace App\Library\Services\Contracts; Interface CustomServiceInterface { public function doSomethingUseful(); }
इसके बाद, इस इंटरफ़ेस के दो ठोस इम्प्लीमेंटेशन बनाते हैं। असल में, हमें सिर्फ दो क्लास बनाने की जरूरत है जो CustomServiceInterface
इंटरफ़ेस का विस्तार करती हैं।
app/Library/Services/DemoOne.php
में DemoOne
क्लास बनाएं।
<?php // app/Library/Services/DemoOne.php namespace App\Library\Services; use App\Library\Services\Contracts\CustomServiceInterface; class DemoOne implements CustomServiceInterface { public function doSomethingUseful() { return 'Output from DemoOne'; } }
इसी तरह, DemoTwo
app/Library/Services/DemoTwo.php
में।
<?php // app/Library/Services/DemoTwo.php namespace App\Library\Services; use App\Library\Services\Contracts\CustomServiceInterface; class DemoTwo implements CustomServiceInterface { public function doSomethingUseful() { return 'Output from DemoTwo'; } }
अब, एक क्लास को bind करने के बजाय, हम एक इंटरफ़ेस bind कर लेंगे। EnvatoCustomServiceProvider.php
पर जाएं और नीचे दिखाए गए कोड को बदलें।
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Library\Services\DemoOne; class EnvatoCustomServiceProvider extends ServiceProvider { public function boot() { } public function register() { $this->app->bind('App\Library\Services\Contracts\CustomServiceInterface', function ($app) { return new DemoOne(); }); } }
इस केस में, हमने App\Library\Services\Contracts\CustomServiceInterface
इंटरफ़ेस को DemoOne
इम्प्लीमेंटेशन के साथ bind कर दिया है। इसलिए, जब भी App\Library\Services\Contracts\CustomServiceInterface
डिपेंडेंसी को हल करने की जरूरत है, यह App\Library\Services\DemoOne
ऑब्जेक्ट को इंस्टनशियेट और रीटर्न करता है। अब यह अधिक समझ में आता है, है ना?
चलो जल्दी से कंट्रोलर कोड को रीवाइस करते हैं।
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use App\Library\Services\Contracts\CustomServiceInterface; class TestController extends Controller { public function index(CustomServiceInterface $customServiceInstance) { echo $customServiceInstance->doSomethingUseful(); } }
जैसा कि आप अनुमान लगा सकते हैं, $customServiceInstance
App\Library\Services\DemoOne
का इंस्टंस होना चाहिए! इस दृष्टिकोण की सुंदरता यह है कि आप DemoOne
इम्प्लीमेंटेशन आसानी से दूसरे के साथ कर सकते हैं।
मान लें कि आप DemoOne
के बजाय DemoTwo
का उपयोग करना चाहते हैं उस स्थिति में, आपको सर्विस प्रोवाइडर EnvatoCustomServiceProvider.php
में केवल निम्नलिखित परिवर्तन करने की आवश्यकता है।
निम्नलिखित लाइन को खोजें:
use App\Library\Services\DemoOne;
और इसके साथ इसे बदलें:
use App\Library\Services\DemoTwo;
इसी प्रकार, यह एक ढूंढें:
return new DemoOne();
इसके द्वारा रीप्लेस किया जाना चाहिए:
return new DemoTwo();
उसी एप्रोच का उपयोग किया जा सकता है, आप अपने स्वयं के साथ किसी भी कोर इम्प्लीमेंटेशन को बदलना चाहते हैं। और यह न सिर्फ आपकी सर्विस कंटेनर बाइंडिंग के लिए उपयोग की जाने वाला बाइंड मेथड है; Laravel सर्विस कंटेनर, सर्विस कंटेनर में bind करने के विभिन्न तरीकों को प्रदान करता है। पूर्ण रिफरेन्स के लिए कृपया ऑफिशल Laravel documentation की जांच करें।
अगला कैंडिडेट boot
मेथड है, जिसका उपयोग आप कोर Laravel फंक्शनलिटी को बढ़ाने के लिए कर सकते हैं। इस मेथड में, आप सर्विस प्रोवाइडर के रजिस्टर मेथड का उपयोग करके रजिस्टर्ड सभी सर्विसेज का उपयोग कर सकते हैं। ज्यादातर मामलों में, आप इस मेथड में अपने ईवेंट लिस्टनर्स को रजिस्टर करना चाहते हैं, जो कुछ होने पर ट्रिगर हो जाएगा।
आइए कुछ उदाहरणों को देखें, जिनके लिए बूट मेथड इम्प्लीमेंटेशन की आवश्यकता होती है।
आप अपने स्वयं के कस्टम फॉर्म फ़ील्ड वैलीडेटर को Laravel में जोड़ना चाहते हैं।
public function boot() { Validator::extend('my_custom_validator', function ($attribute, $value, $parameters, $validator) { // validation logic goes here... }); }
क्या आप एक व्यू कंपोजर रजिस्टर करना चाहते हैं, ऐसा करने के लिए यह सही जगह है! वास्तव में, हम कह सकते हैं कि बूट मेथड अक्सर व्यू कम्पोज़र्स को जोड़ने के लिए उपयोग किया जाता है!
public function boot() { View::composer( 'demo', 'App\Http\ViewComposers\DemoComposer' ); }
बेशक, आप पहले स्थान पर अपने सर्विस प्रोवाइडर में एक फसाड (facade) Illuminate\Support\Facades\View
को आयात करना चाहते हैं।
उसी क्षेत्र में, आप डेटा को कई व्यूज (views) में भी साझा कर सकते हैं!
public function boot() { View::share('key', 'value'); }
यह स्पष्ट (explicit) मॉडल बाइंडिंग को डिफाइन करने के लिए भी उपयोग किया जा सकता है।
public function boot() { parent::boot(); Route::model('user', App\User::class); }
बूट मेथॉस के उपयोग को प्रदर्शित करने के लिए ये कुछ उदाहरण थे। जितना अधिक आप Laravel में आते हैं, उतना ही अधिक कारण आपको इसे इम्प्लीमेंट करने के लिए मिलेगा!
और इसके साथ, हम इस आर्टिकल के अंत तक पहुंच चुके हैं। मुझे आशा है कि आपने उन विषयों का आनंद उठाया है जिनकी इस आर्टिकल में चर्चा हुई है।
निष्कर्ष
यह सर्विस प्रोवाइडर्स की चर्चा थी, जो इस आर्टिकल का केंद्र आकर्षण था, हालांकि हमने सर्विस कंटेनर के साथ हमारा आर्टिकल शुरू किया क्योंकि सर्विस प्रोवाइडर को समझने के लिए यह एक महत्वपूर्ण इंग्रेडिएंट था।
उसके बाद, हमने एक कस्टम सर्विस प्रोवाइडर विकसित किया, और आर्टिकल के उत्तरार्ध में हम कुछ व्यावहारिक उदाहरणों के माध्यम से चले।
आप में से जो लोग या तो Laravel के साथ शुरू हो रहे हैं या अपने ज्ञान, साइट या एक्सटेंशन के साथ एप्लीकेशन का विस्तार करने की तलाश में हैं, हमारे पास कई तरह की चीजें हैं जो आप Envato Market में पढ़ सकते हैं।
यदि आपके पास कोई प्रश्न या कमेंट है, तो बस इसे नीचे फ़ीड का उपयोग करके हमे बताएं!