लेख

लारवेल में सेवा प्रदाता: वे क्या हैं और लारवेल में सेवा प्रदाताओं का उपयोग कैसे करें

लारवेल सेवा प्रदाता केंद्रीय स्थान हैं जहां एप्लिकेशन लॉन्च किया गया है। यही है, लार्वा कोर सेवाओं और एप्लिकेशन सेवाओं, कक्षाओं और उनकी निर्भरताओं को प्रदाताओं के माध्यम से सेवा कंटेनर में धकेल दिया जाता है। 

दूसरे शब्दों में, सेवा प्रदाता एक फ़नल की तरह हैं जिसके माध्यम से हम लारवेल नामक इंजन के "सर्विस कंटेनर" नामक टैंक में "श्रेणी" ईंधन डालते हैं।

उदाहरण

अगर हम कॉन्फ़िग/एप.php खोलते हैं तो हमें "प्रदाता" नाम के साथ एक सरणी दिखाई देगी

'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,
        .
        .
        .
],

ये कुछ सर्विस प्रोवाइडर हैं जो लारवेल के साथ मिलकर प्रदान किए जाते हैं, यानी बुनियादी सेवाएं जिन्हें सर्विस कंटेनर में रखा जाता है।

क्वांडो मैं service provider क्या वे प्रदर्शन कर रहे हैं?

अगर हम दस्तावेज़ देखें अनुरोध जीवनचक्र पर , निम्न फ़ाइलें प्रारंभ में निष्पादित की जाती हैं:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php और उसके Middlewares
  • Service Providers: इस लेख की सामग्री

Quali service provider क्या वे भरे हुए हैं? 

वे वो हैं defiसरणी में नाइट्स config/app.php:

return [
 
    // ... other configuration values
 
    'providers' => [
 
        /*
         * Laravel Framework Service Providers...
         */
        Illuminate\Auth\AuthServiceProvider::class,
        Illuminate\Broadcasting\BroadcastServiceProvider::class,
 
        // ... other framework providers from /vendor
        Illuminate\Validation\ValidationServiceProvider::class,
        Illuminate\View\ViewServiceProvider::class,
 
        /*
         * PUBLIC Service Providers - the ones we mentioned above
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
 
    ],
 
];

जैसा कि हम देख सकते हैं, की एक सूची है service provider फ़ोल्डर में सार्वजनिक नहीं /vendor, हमें उन्हें न तो छूना चाहिए और न ही संशोधित करना चाहिए। जिन लोगों में हमारी रुचि है, वे नीचे हैं BroadcastServicerProvider डिफ़ॉल्ट रूप से अक्षम, शायद इसलिए कि इसका उपयोग शायद ही कभी किया जाता है।

ये सभी सेवा प्रदाता सूची को दोहराते हुए ऊपर से नीचे तक चलते हैं दो बार:

  • पहला पुनरावृत्ति एक वैकल्पिक विधि की तलाश में है register(), विधि से पहले कॉन्फ़िगर की गई किसी चीज़ को निष्पादित करने (अंततः) के लिए उपयोगी boot().
  • दूसरा पुनरावृत्ति विधि को निष्पादित करता है boot() सभी प्रदाताओं की। फिर से, एक के बाद एक, ऊपर से नीचे, सरणी के 'providers'.
  • अंत में, सभी सेवा प्रदाताओं को संसाधित करने के बाद, Laravel पाथ (रूट) को पार्स करने, कंट्रोलर को चलाने, टेम्प्लेट का उपयोग करने आदि के लिए आगे बढ़ता है।

सेवा प्रदाता लारवेल प्रीdefiniti

I Service Providers Laravel में शामिल, वे सभी फ़ोल्डर में मौजूद हैं app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

वे सभी PHP वर्ग हैं, प्रत्येक अपने विषय से संबंधित हैं: App, Auth, Broadcasting, Events e Routes. लेकिन उन सभी में एक चीज समान है: तरीका boot().

उस मेथड के अंदर, हम इनमें से किसी भी सेक्शन से संबंधित कोई भी कोड लिख सकते हैं: auth, events, route, वगैरह। दूसरे शब्दों में, सेवा प्रदाता कुछ वैश्विक कार्यक्षमता दर्ज करने के लिए केवल वर्ग हैं।

वे "प्रदाताओं" के रूप में अलग हैं क्योंकि वे एप्लिकेशन जीवनचक्र में बहुत जल्दी चलते हैं, इसलिए निष्पादन स्क्रिप्ट को मॉडल या नियंत्रकों तक पहुंचने से पहले यहां कुछ वैश्विक सुविधाजनक है।

अधिकांश कार्यक्षमता RouteServiceProvider में है, यहाँ कोड है:

class RouteServiceProvider extends ServiceProvider
{
    public const HOME = '/dashboard';
 
    public function boot()
    {
        $this->configureRateLimiting();
 
        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->group(base_path('routes/api.php'));
 
            Route::middleware('web')
                ->group(base_path('routes/web.php'));
        });
    }
 
    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
        });
    }
}

यह वह वर्ग है जहाँ फ़ाइलें कॉन्फ़िगर की गई हैं routeके साथ, routes/web.phproutes/api.php डिफ़ॉल्ट रूप से शामिल हैdefiनीता. ध्यान दें कि एपीआई के लिए अलग-अलग कॉन्फ़िगरेशन भी हैं: एंडपॉइंट उपसर्ग /api और मिडलवेयर api सभी के लिए routes.

हम संपादित कर सकते हैं service providers, जो फ़ोल्डर में नहीं हैं /vendor. इन फ़ाइलों को अनुकूलित करना तब किया जाता है जब आपके पास कई पथ होते हैं और उन्हें विशिष्ट फ़ाइलों में अलग करना चाहते हैं। तुम बनाते हो routes/auth.php और वहां पथ डालें, फिर आप उस फ़ाइल को विधि में "सक्षम" करें boot() di RouteServiceProvider, केवल तीसरा वाक्य जोड़ें:

`Route::middleware('web') // or maybe you want another middleware?
    ->group(base_path('routes/auth.php'));

AppServiceProvider ये खाली है। कोड जोड़ने का एक विशिष्ट उदाहरण AppServiceProvider, Eloquent में आलसी लोडिंग को अक्षम करने के बारे में है। ऐसा करने के लिए, आपको बस चाहिए दो पंक्तियाँ जोड़ें विधि में boot():

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

यदि संबंध मॉडल लोड नहीं होता है तो यह एक अपवाद फेंक देगा।

अपना स्वयं का बनाएं service provider अनुकूलित

पूर्व फ़ाइलों के अलावाdefiरात में, हम आसानी से एक नया बना सकते हैं Service Provider, उन पूर्व के अलावा अन्य विषयों से संबंधितdefiके रूप में समाप्त हुआ auth/event/routes.

दृश्य विन्यास एक काफी विशिष्ट उदाहरण है Blade. हम एक निर्देश बना सकते हैं Blade, और फिर उस कोड को विधि में जोड़ें boot() किसी के भी service provider, डिफ़ॉल्ट सहित AppServiceProvider. चलिए अब एक बनाते हैं ViewServiceProvider अलग करना

हम इसे इस आदेश से उत्पन्न कर सकते हैं:

php artisan make:provider ViewServiceProvider

जो इतनी प्री क्लास जनरेट करेगाdefiरात:

namespace App\Providers;
 
use Illuminate\Support\ServiceProvider;
 
class ViewServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
 
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }
}

जैसा कि हम अंदर देख सकते हैं दो तरीके हैं:

रजिस्टर () विधि

रजिस्टर() विधि हमें इसकी अनुमति देती है defiहमारे सर्विस कंटेनर से लिंक करें। उदाहरण के लिए, निम्नलिखित कोड में:

public function register()
{
    $this->app->singleton(my_class, function($app){
        return new MyClass($app);
    });
}

$this->app laravel में एक वैश्विक चर है जिसे एक सिंगलटन वर्ग ऐप के माध्यम से एक्सेस कर सकता है।

सिंगलटन एक विशेषता है। इस सुविधा को लागू करते समय, हम एप्लिकेशन को सूचित कर रहे हैं कि जो भी वर्ग ऐप में एक पैरामीटर के रूप में पारित किया गया है, पूरे एप्लिकेशन में केवल एक उदाहरण होना चाहिए। इसका अर्थ है कि MyClass को एक बार हल किया जाएगा और इसका केवल एक उदाहरण होगा, जिसे my_class चर का उपयोग करके एक्सेस किया जा सकता है।

बूट () विधि

बूट () विधि आपको रजिस्टर विधि का उपयोग करके पहले से पंजीकृत सभी सेवाओं तक पहुँचने की अनुमति देती है। फिर आप इस पद्धति का उपयोग करके अपने आवेदन में संपूर्ण सेवा शामिल कर सकते हैं।

पिछले उदाहरण पर वापस जा रहे हैं, आइए विधि को हटा दें register() और भीतर boot() ब्लेड निर्देश कोड जोड़ें:

use Illuminate\Support\Facades\Blade;
 
public function boot()
{
    Blade::directive('datetime', function ($expression) {
        return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
    });
}

का एक और उदाहरण ViewServiceProvider इसका वास्ता View Composers, यहाँ अंश है आधिकारिक Laravel साइट से :

use App\View\Composers\ProfileComposer;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
 
class ViewServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // Using class based composers...
        View::composer('profile', ProfileComposer::class);
 
        // Using closure based composers...
        View::composer('dashboard', function ($view) {
            //
        });
    }
}

चलाने के लिए, इस नए प्रदाता को प्रदाता सरणी में जोड़ा/पंजीकृत किया जाना चाहिए config/app.php:

return [
    // ... other configuration values
 
    'providers' => [
 
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
 
        // Add your provider here
        App\Providers\ViewServiceProvider::class,
    ],
];

Ercole Palmeri

इसमें आपकी भी रुचि हो सकती है:

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।

हाल के लेख

बच्चों के लिए रंग भरने वाले पन्नों के लाभ - सभी उम्र के लोगों के लिए जादू की दुनिया

रंग भरने के माध्यम से बढ़िया मोटर कौशल विकसित करना बच्चों को लेखन जैसे अधिक जटिल कौशल के लिए तैयार करता है। रंग भरना…

2 मई 2024

भविष्य यहाँ है: कैसे शिपिंग उद्योग वैश्विक अर्थव्यवस्था में क्रांति ला रहा है

नौसैनिक क्षेत्र एक सच्ची वैश्विक आर्थिक शक्ति है, जो 150 अरब के बाज़ार की ओर बढ़ चुका है...

1 मई 2024

आर्टिफिशियल इंटेलिजेंस द्वारा संसाधित सूचना के प्रवाह को विनियमित करने के लिए प्रकाशक और ओपनएआई ने समझौते पर हस्ताक्षर किए

पिछले सोमवार को, फाइनेंशियल टाइम्स ने OpenAI के साथ एक समझौते की घोषणा की। एफटी अपनी विश्व स्तरीय पत्रकारिता को लाइसेंस देता है...

अप्रैल 30 2024

ऑनलाइन भुगतान: यहां बताया गया है कि स्ट्रीमिंग सेवाएं आपको हमेशा के लिए भुगतान कैसे कराती हैं

लाखों लोग स्ट्रीमिंग सेवाओं के लिए मासिक सदस्यता शुल्क का भुगतान करते हैं। यह आम राय है कि आप...

अप्रैल 29 2024

अपनी भाषा में इनोवेशन पढ़ें

नवाचार समाचार पत्र
नवाचार पर सबसे महत्वपूर्ण समाचार देखना न भूलें। उन्हें ईमेल द्वारा प्राप्त करने के लिए साइन अप करें।

Seguici