Greinar

Þjónustuveitendur í Laravel: hvað þeir eru og hvernig á að nota þjónustuveitendur í Laravel

Þjónustuveitendur Laravel eru miðlægi staðurinn þar sem forritið er ræst. Það er að segja, kjarna Laravel þjónusta og forritaþjónusta, flokkar og ósjálfstæði þeirra eru sett í þjónustuílátið í gegnum veitendur. 

Með öðrum orðum, þjónustuveitendur eru eins og trekt sem við hellum „klassa“ eldsneyti í tank sem kallast „þjónustuílát“ vélar sem heitir Laravel.

dæmi

Ef við opnum config/app.php munum við sjá fylki með nafninu "provider"

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

Þetta eru nokkrir af þeim þjónustuaðilum sem veittir eru ásamt laravel, þ.e.a.s grunnþjónustu sem er sett í þjónustugáminn.

Þegar ég service provider eru þær framkvæmdar?

Ef við skoðum skjölin líftíma samkvæmt beiðni , eru eftirfarandi skrár keyrðar í byrjun:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php og hans Middlewares
  • Service Providers: innihald þessarar greinar

hvað service provider eru þeir hlaðnir? 

Þeir eru þeir definætur í fylkinu 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,
 
    ],
 
];

Eins og við sjáum er listi yfir service provider ekki opinbert í möppunni /vendor, við ættum hvorki að snerta þær né breyta. Þeir sem vekja áhuga okkar eru fyrir neðan, með BroadcastServicerProvider sjálfgefið óvirkt, líklega vegna þess að það er sjaldan notað.

Allir þessir þjónustuaðilar keyra frá toppi til botns og endurtaka listann tvisvar:

  • Fyrsta endurtekningin er að leita að valfrjálsri aðferð register(), gagnlegt til að (að lokum) keyra eitthvað stillt á undan aðferðinni boot().
  • önnur endurtekningin keyrir aðferðina boot() allra veitenda. Aftur, einn af öðrum, ofan til botns, í fylkinu 'providers'.
  • Að lokum, eftir að búið er að vinna úr öllum þjónustuveitendum, heldur Laravel áfram að flokka slóðina (leiðina), keyra stjórnandann, nota sniðmát o.s.frv.

Þjónustuveitendur Laravel predefihvorugt

I Service Providers innifalin í Laravel, eru allir þeir sem eru til staðar í möppunni app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Þeir eru allir PHP flokkar, hver tengdur sínu efni: App, Auth, Broadcasting, Events e Routes. En þeir eiga allir eitt sameiginlegt: aðferð boot().

Inni í þeirri aðferð getum við skrifað hvaða kóða sem er sem tengist einhverjum af þessum hlutum: auth, events, route, o.s.frv. Með öðrum orðum, þjónustuveitendur eru bara flokkar til að skrá einhverja alþjóðlega virkni.

Þeir eru aðskildir sem "veitendur" vegna þess að þeir keyra mjög snemma í líftíma forritsins, svo eitthvað alþjóðlegt er þægilegt hér áður en keyrsluhandritið kemst í Models eða Controllers.

Mest af virkninni er í RouteServiceProvider, hér er kóðinn:

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());
        });
    }
}

Þetta er flokkurinn þar sem skrárnar eru stilltar route, Með routes/web.phproutes/api.php innifalinn sjálfgefiðdefiníta. Athugaðu að fyrir API eru líka mismunandi stillingar: Endpoint forskeyti /api og millibúnaður api fyrir alla routes.

Við getum breytt service providers, sem eru ekki í möppunni /vendor. Að sérsníða þessar skrár er gert þegar þú ert með margar leiðir og vilt aðgreina þær í sérstakar skrár. Þú býrð til routes/auth.php og settu slóðirnar þar, þá "virkjar" þá skrána í aðferðinni boot() di RouteServiceProvider, bættu bara við þriðju setningunni:

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

AppServiceProvider það er tómt. Dæmigerð dæmi um að bæta við kóða AppServiceProvider, snýst um að slökkva á lata hleðslu í Eloquent . Til að gera þetta þarftu bara bæta við tveimur línum í aðferðinni boot():

Nýsköpunarfréttabréf
Ekki missa af mikilvægustu fréttunum um nýsköpun. Skráðu þig til að fá þau með tölvupósti.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Þetta mun kalla fram undantekningu ef tengslalíkan er ekki hlaðið.

Búðu til þína eigin service provider aðlaga

Til viðbótar við forskrárnardefinætur, við getum auðveldlega búið til nýjan Service Provider, sem tengjast öðrum viðfangsefnum en þeim sem fyrrvdefilokið sem auth/event/routes.

Nokkuð dæmigert dæmi er útsýnisstillingin Blade. Við getum búið til tilskipun Blade, og bættu svo þessum kóða við aðferðina boot() af hvaða service provider, þar á meðal sjálfgefið AppServiceProvider. Við skulum nú búa til a ViewServiceProvider aðskilið.

Við getum búið til það með þessari skipun:

php artisan make:provider ViewServiceProvider

Sem mun búa til bekkinn svo predefikvöld:

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()
    {
        //
    }
}

Eins og við sjáum inni eru tvær aðferðir:

Register() aðferðin

Register() aðferðin gerir okkur kleift að definish tenglar á þjónustuílátið okkar. Til dæmis, í eftirfarandi kóða:

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

$this->app er alþjóðleg breyta í laravel sem singleton class hefur aðgang að í gegnum appið.

Singleton er eiginleiki. Þegar þessum eiginleika er beitt erum við að upplýsa forritið um að hvaða flokkur sem er samþykktur sem færibreyta í appinu ætti aðeins að hafa eitt tilvik í öllu forritinu. Þetta þýðir að MyClass verður leyst einu sinni og mun aðeins hafa eitt tilvik, sem hægt er að nálgast með því að nota my_class breytuna.

Boot() aðferðin

Boot() aðferðin gerir þér kleift að fá aðgang að öllum þjónustum sem áður hafa verið skráðar með skráningaraðferðinni. Þú getur síðan látið alla þjónustuna fylgja með forritinu þínu með þessari aðferð.

Farið aftur í fyrra dæmið, við skulum fjarlægja aðferðina register() og innan boot() bættu við Blade tilskipunarkóðanum:

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

Annað dæmi um ViewServiceProvider tillitssemi View Composers, hér er brotið frá opinberu Laravel síðunni :

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) {
            //
        });
    }
}

Til að keyra verður að bæta við/skrá þessa nýju þjónustuveitu í fylkið í þjónustuveitunni 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

Þú gætir líka haft áhuga á:

Nýsköpunarfréttabréf
Ekki missa af mikilvægustu fréttunum um nýsköpun. Skráðu þig til að fá þau með tölvupósti.

Nýlegar greinar

Útgefendur og OpenAI skrifa undir samninga um að stjórna flæði upplýsinga sem unnið er með gervigreind

Síðasta mánudag tilkynnti Financial Times um samning við OpenAI. FT leyfir heimsklassa blaðamennsku…

30 Apríl 2024

Greiðslur á netinu: Hér er hvernig streymisþjónusta gerir þér kleift að borga að eilífu

Milljónir manna borga fyrir streymisþjónustu og greiða mánaðarlega áskriftargjöld. Það er almenn skoðun að þú…

29 Apríl 2024

Veeam býður upp á umfangsmesta stuðninginn fyrir lausnarhugbúnað, allt frá vernd til viðbragða og bata

Coveware frá Veeam mun halda áfram að veita viðbragðsþjónustu fyrir tölvukúgun. Coveware mun bjóða upp á réttar- og úrbótamöguleika ...

23 Apríl 2024

Græn og stafræn bylting: Hvernig forspárviðhald er að umbreyta olíu- og gasiðnaðinum

Forspárviðhald er að gjörbylta olíu- og gasgeiranum, með nýstárlegri og fyrirbyggjandi nálgun við verksmiðjustjórnun.…

22 Apríl 2024