వ్యాసాలు

లారావెల్‌లో సర్వీస్ ప్రొవైడర్లు: అవి ఏమిటి మరియు లారావెల్‌లో సర్వీస్ ప్రొవైడర్‌లను ఎలా ఉపయోగించాలి

లారావెల్ సర్వీస్ ప్రొవైడర్లు అప్లికేషన్ ప్రారంభించబడిన కేంద్ర ప్రదేశం. అంటే, కోర్ లారావెల్ సేవలు మరియు అప్లికేషన్ సేవలు, తరగతులు మరియు వాటి డిపెండెన్సీలు ప్రొవైడర్ల ద్వారా సర్వీస్ కంటైనర్‌లో ఉంచబడతాయి. 

మరో మాటలో చెప్పాలంటే, సర్వీస్ ప్రొవైడర్లు లారావెల్ అనే ఇంజిన్ యొక్క "సర్వీస్ కంటైనర్" అనే ట్యాంక్‌లో "క్లాస్" ఇంధనాన్ని పోసే గరాటు లాంటివి.

ఉదాహరణకు

మేము 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శ్రేణిలో నైట్స్ 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'.
  • చివరగా, అన్ని సర్వీస్ ప్రొవైడర్లు ప్రాసెస్ చేయబడిన తర్వాత, లారావెల్ మార్గాన్ని (మార్గాన్ని) అన్వయించడం, కంట్రోలర్‌ను అమలు చేయడం, టెంప్లేట్‌లను ఉపయోగించడం మొదలైనవాటికి వెళుతుంది.

సర్వీస్ ప్రొవైడర్లు లారావెల్ ప్రీdefiనీతి

I Service Providers లారావెల్‌లో చేర్చబడ్డాయి, ఫోల్డర్‌లో ఉన్నవన్నీ ఉన్నాయి 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, ఎలోక్వెంట్‌లో సోమరితనం లోడింగ్‌ను నిలిపివేయడం గురించి. ఇది చేయటానికి, మీరు కేవలం అవసరం రెండు పంక్తులు జోడించండి పద్ధతిలో 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()
    {
        //
    }
}

మేము లోపల చూడగలిగినట్లుగా రెండు పద్ధతులు ఉన్నాయి:

రిజిస్టర్ () పద్ధతి

నమోదు () పద్ధతి మాకు అనుమతిస్తుంది defiమా సేవా కంటైనర్‌కు నిష్ లింక్‌లు. ఉదాహరణకు, కింది కోడ్‌లో:

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

$this->యాప్ అనేది లారావెల్‌లోని గ్లోబల్ వేరియబుల్, దీనిని సింగిల్‌టన్ క్లాస్ యాప్ ద్వారా యాక్సెస్ చేయవచ్చు.

సింగిల్టన్ ఒక లక్షణం. ఈ ఫీచర్‌ని వర్తింపజేస్తున్నప్పుడు, యాప్‌లో ఏ తరగతి పారామీటర్‌గా ఉత్తీర్ణత పొందుతుందో అది మొత్తం అప్లికేషన్‌లో ఒక ఉదాహరణ మాత్రమే కలిగి ఉండాలని మేము అప్లికేషన్‌కి తెలియజేస్తున్నాము. దీనర్థం 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, ఇక్కడ స్నిప్పెట్ ఉంది అధికారిక లారావెల్ సైట్ నుండి :

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

మీరు వీటిపై కూడా ఆసక్తి కలిగి ఉండవచ్చు:

ఇన్నోవేషన్ వార్తాలేఖ
ఆవిష్కరణకు సంబంధించిన అత్యంత ముఖ్యమైన వార్తలను మిస్ చేయవద్దు. ఇమెయిల్ ద్వారా వాటిని స్వీకరించడానికి సైన్ అప్ చేయండి.

ఇటీవల కథనాలు

ఆగ్మెంటెడ్ రియాలిటీలో వినూత్న జోక్యం, కాటానియా పాలిక్లినిక్‌లో ఆపిల్ వ్యూయర్‌తో

ఆపిల్ విజన్ ప్రో కమర్షియల్ వ్యూయర్‌ని ఉపయోగించి ఆప్తాల్మోప్లాస్టీ ఆపరేషన్ కాటానియా పాలిక్లినిక్‌లో నిర్వహించబడింది…

మే 29 మే

పిల్లల కోసం పేజీలను కలరింగ్ చేయడం వల్ల కలిగే ప్రయోజనాలు - అన్ని వయసుల వారికి మేజిక్ ప్రపంచం

కలరింగ్ ద్వారా చక్కటి మోటారు నైపుణ్యాలను పెంపొందించుకోవడం, రాయడం వంటి క్లిష్టమైన నైపుణ్యాల కోసం పిల్లలను సిద్ధం చేస్తుంది. రంగు వేయడానికి…

మే 29 మే

భవిష్యత్తు ఇక్కడ ఉంది: షిప్పింగ్ పరిశ్రమ గ్లోబల్ ఎకానమీని ఎలా విప్లవాత్మకంగా మారుస్తోంది

నావికా రంగం నిజమైన ప్రపంచ ఆర్థిక శక్తి, ఇది 150 బిలియన్ల మార్కెట్ వైపు నావిగేట్ చేసింది...

మే 29 మే

ఆర్టిఫిషియల్ ఇంటెలిజెన్స్ ద్వారా ప్రాసెస్ చేయబడిన సమాచార ప్రవాహాన్ని నియంత్రించడానికి ప్రచురణకర్తలు మరియు OpenAI ఒప్పందాలపై సంతకం చేస్తారు

గత సోమవారం, ఫైనాన్షియల్ టైమ్స్ OpenAIతో ఒప్పందాన్ని ప్రకటించింది. FT దాని ప్రపంచ స్థాయి జర్నలిజానికి లైసెన్స్ ఇస్తుంది…

ఏప్రిల్ 29 మంగళవారం

మీ భాషలో ఇన్నోవేషన్ చదవండి

ఇన్నోవేషన్ వార్తాలేఖ
ఆవిష్కరణకు సంబంధించిన అత్యంత ముఖ్యమైన వార్తలను మిస్ చేయవద్దు. ఇమెయిల్ ద్వారా వాటిని స్వీకరించడానికి సైన్ అప్ చేయండి.

మాకు అనుసరించండి

ఇటీవల కథనాలు