लेख

Laravel मधील सेवा प्रदाता: ते काय आहेत आणि Laravel मध्ये सेवा प्रदाते कसे वापरावेत

Laravel सेवा प्रदाते ही मध्यवर्ती ठिकाणे आहेत जिथे अर्ज सुरू केला जातो. म्हणजेच, मुख्य Laravel सेवा आणि अनुप्रयोग सेवा, वर्ग आणि त्यांचे अवलंबित्व प्रदात्यांद्वारे सेवा कंटेनरमध्ये ठेवल्या जातात. 

दुसऱ्या शब्दांत, सेवा प्रदाते हे फनेलसारखे असतात ज्याद्वारे आपण लारावेल नावाच्या इंजिनच्या "सर्व्हिस कंटेनर" नावाच्या टाकीमध्ये "वर्ग" इंधन ओततो.

उदाहरणार्थ

आम्ही config/app.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: या लेखाची सामग्री

क्वाली service provider ते लोड आहेत? 

ते आहेत defiअॅरे मध्ये nites 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 मार्ग (मार्ग) पार्स करणे, कंट्रोलर चालवणे, टेम्पलेट्स वापरणे इ.

सेवा प्रदाता Laravel प्रीdefiनीती

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 आणि मिडलवेअर 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 सानुकूल

पूर्व फाइल्स व्यतिरिक्तdefinites, आम्ही सहजपणे एक नवीन तयार करू शकतो 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()
    {
        //
    }
}

जसे आपण आत पाहू शकतो की दोन पद्धती आहेत:

रजिस्टर() पद्धत

register() पद्धत आम्हाला परवानगी देते defiआमच्या सेवा कंटेनरशी निश लिंक. उदाहरणार्थ, खालील कोडमध्ये:

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

$this->अ‍ॅप हे laravel मधील एक जागतिक चल आहे ज्यात सिंगलटन वर्ग अ‍ॅपद्वारे प्रवेश करू शकतो.

सिंगलटन हे एक वैशिष्ट्य आहे. हे वैशिष्ट्य लागू करताना, आम्ही अनुप्रयोगाला सूचित करत आहोत की अॅपमध्ये पॅरामीटर म्हणून कोणताही वर्ग उत्तीर्ण झाला असेल तर संपूर्ण अनुप्रयोगामध्ये फक्त एकच उदाहरण असावे. याचा अर्थ असा की मायक्लास एकदाच सोडवला जाईल आणि फक्त एकच उदाहरण असेल, ज्याला my_class व्हेरिएबल वापरून प्रवेश करता येईल.

boot() पद्धत

boot() पद्धत तुम्हाला नोंदणी पद्धतीचा वापर करून पूर्वी नोंदणीकृत सर्व सेवांमध्ये प्रवेश करण्याची परवानगी देते. त्यानंतर तुम्ही ही पद्धत वापरून तुमच्या ऍप्लिकेशनमध्ये संपूर्ण सेवा समाविष्ट करू शकता.

मागील उदाहरणाकडे परत जाऊन, पद्धत काढून टाकू 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

तुम्हाला यामध्ये देखील स्वारस्य असू शकते:

इनोव्हेशन वृत्तपत्र
नवोपक्रमावरील सर्वात महत्त्वाच्या बातम्या चुकवू नका. त्यांना ईमेलद्वारे प्राप्त करण्यासाठी साइन अप करा.

अलीकडील लेख

आर्टिफिशियल इंटेलिजन्सद्वारे प्रक्रिया केलेल्या माहितीच्या प्रवाहाचे नियमन करण्यासाठी प्रकाशक आणि OpenAI करारांवर स्वाक्षरी करतात

गेल्या सोमवारी, फायनान्शिअल टाईम्सने OpenAI सह करार जाहीर केला. FT ने त्याच्या जागतिक दर्जाच्या पत्रकारितेचा परवाना…

30 एप्रिल 2024

ऑनलाइन पेमेंट: स्ट्रीमिंग सेवा तुम्हाला कायमचे पैसे कसे देतात ते येथे आहे

लाखो लोक स्ट्रीमिंग सेवांसाठी पैसे देतात, मासिक सदस्यता शुल्क भरतात. असे सामान्य मत आहे की आपण…

29 एप्रिल 2024

Veeam मध्ये रॅन्समवेअरसाठी सर्वात व्यापक समर्थन, संरक्षणापासून प्रतिसाद आणि पुनर्प्राप्तीपर्यंत वैशिष्ट्ये आहेत

Veeam द्वारे Coveware सायबर खंडणी घटना प्रतिसाद सेवा प्रदान करणे सुरू ठेवेल. Coveware फॉरेन्सिक आणि उपाय क्षमता प्रदान करेल…

23 एप्रिल 2024

हरित आणि डिजिटल क्रांती: भविष्यसूचक देखभाल तेल आणि वायू उद्योगात कशी बदल घडवत आहे

वनस्पती व्यवस्थापनासाठी नाविन्यपूर्ण आणि सक्रिय दृष्टीकोनसह, भविष्यसूचक देखभाल तेल आणि वायू क्षेत्रात क्रांती घडवत आहे.…

22 एप्रिल 2024

तुमच्या भाषेत इनोव्हेशन वाचा

इनोव्हेशन वृत्तपत्र
नवोपक्रमावरील सर्वात महत्त्वाच्या बातम्या चुकवू नका. त्यांना ईमेलद्वारे प्राप्त करण्यासाठी साइन अप करा.

आमचे अनुसरण करा