raksti

Pakalpojumu sniedzēji Laravelā: kas tie ir un kā izmantot pakalpojumu sniedzējus Laravelā

Laravel pakalpojumu sniedzēji ir galvenā vieta, kur tiek palaists lietojumprogramma. Tas nozīmē, ka Laravel pamatpakalpojumi un lietojumprogrammu pakalpojumi, klases un to atkarības tiek ievietotas pakalpojumu konteinerā, izmantojot pakalpojumu sniedzējus. 

Citiem vārdiem sakot, pakalpojumu sniedzēji ir kā piltuve, caur kuru mēs ielejam "klases" degvielu tvertnē, ko sauc par "servisa konteineru" dzinējam ar nosaukumu Laravel.

piemērs

Atverot config/app.php, mēs redzēsim masīvu ar nosaukumu "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,
        .
        .
        .
],

Tie ir daži no pakalpojumu sniedzējiem, kas tiek nodrošināti kopā ar laravel, t.i., pamatpakalpojumi, kas tiek ievietoti pakalpojumu konteinerā.

Kad es service provider vai tās tiek veiktas?

Ja skatāmies uz dokumentāciju pēc pieprasījuma dzīves cikls , sākumā tiek palaisti šādi faili:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php un viņa Middlewares
  • Service Providers: šī raksta saturs

kvali service provider vai tie ir ielādēti? 

Viņi ir tie definites masīvā 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,
 
    ],
 
];

Kā redzam, ir saraksts ar service provider nav publiski pieejams mapē /vendor, mums nevajadzētu tos ne pieskarties, ne mainīt. Tie, kas mūs interesē, ir zemāk, ar BroadcastServicerProvider pēc noklusējuma ir atspējots, iespējams, tāpēc, ka to izmanto reti.

Visi šie pakalpojumu sniedzēji darbojas no augšas uz leju, atkārtojot sarakstu divreiz:

  • Pirmajā iterācijā tiek meklēta izvēles metode register(), noder, lai (galu galā) izpildītu kaut ko, kas konfigurēts pirms metodes boot().
  • otrā iterācija izpilda metodi boot() no visiem pakalpojumu sniedzējiem. Atkal, pa vienam, no augšas uz leju, no masīva 'providers'.
  • Visbeidzot, kad visi pakalpojumu sniedzēji ir apstrādāti, Laravel pāriet uz ceļa (maršruta) parsēšanu, kontroliera palaišanu, veidņu izmantošanu utt.

Pakalpojumu sniedzēji Laravel predefinē

I Service Providers iekļauti Laravel, ir visi, kas atrodas mapē app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Tās visas ir PHP klases, katra ir saistīta ar savu tēmu: App, Auth, Broadcasting, Events e Routes. Bet viņiem visiem ir viena kopīga iezīme: metode boot().

Šīs metodes ietvaros mēs varam ierakstīt jebkuru kodu, kas saistīts ar jebkuru no šīm sadaļām: auth, events, routeutt. Citiem vārdiem sakot, pakalpojumu sniedzēji ir tikai klases, lai reģistrētu kādu globālu funkcionalitāti.

Tie ir atsevišķi kā “nodrošinātāji”, jo tie darbojas ļoti agrīnā lietojumprogrammas dzīves cikla posmā, tāpēc šeit ir ērti kaut kas globāls, pirms izpildes skripts nonāk modeļos vai kontrolleros.

Lielākā daļa funkcionalitātes ir RouteServiceProvider, šeit ir kods:

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

Šī ir klase, kurā faili ir konfigurēti route, Ar routes/web.phproutes/api.php iekļauts pēc noklusējumadefinita. Ņemiet vērā, ka API ir arī dažādas konfigurācijas: beigu punkta prefikss /api un starpprogrammatūra api visiem routes.

Mēs varam rediģēt service providers, kas nav mapē /vendor. Šo failu pielāgošana tiek veikta, ja jums ir daudz ceļu un vēlaties tos sadalīt konkrētos failos. Jūs veidojat routes/auth.php un ievietojiet ceļus tur, tad jūs "iespējojiet" šo failu metodē boot() di RouteServiceProvider, vienkārši pievienojiet trešo teikumu:

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

AppServiceProvider tas ir tukšs. Tipisks koda pievienošanas piemērs AppServiceProvider, ir par slinkās ielādes atspējošanu Eloquent . Lai to izdarītu, jums vienkārši nepieciešams pievienojiet divas rindiņas metodē boot():

Inovāciju biļetens
Nepalaidiet garām svarīgākās ziņas par jauninājumiem. Reģistrējieties, lai tos saņemtu pa e-pastu.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Tas radīs izņēmumu, ja attiecību modelis netiks ielādēts.

Izveidojiet savu service provider paraža

Papildus iepriekšējiem failiemdefinites, mēs varam viegli izveidot jaunu Service Provider, kas saistīti ar citām tēmām, nevis tām, kuras iepriekšdefipabeigts kā auth/event/routes.

Diezgan tipisks piemērs ir skata konfigurācija Blade. Mēs varam izveidot direktīvu Bladeun pēc tam pievienojiet šo kodu metodei boot() no jebkura service provider, tostarp noklusējuma AppServiceProvider. Tagad izveidosim a ViewServiceProvider atsevišķi.

Mēs to varam ģenerēt ar šo komandu:

php artisan make:provider ViewServiceProvider

Kas radīs klases tik iepriekšdefivakars:

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

Kā redzam iekšpusē, ir divas metodes:

Reģistra() metode

Reģistra() metode ļauj mums definish saites uz mūsu pakalpojumu konteineru. Piemēram, šādā kodā:

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

$this->app ir globāls laravel mainīgais, kuram viena klase var piekļūt, izmantojot lietotni.

Singleton ir iezīme. Lietojot šo funkciju, mēs informējam lietojumprogrammu, ka jebkurai klasei, kas lietotnē tiek nodota kā parametrs, visā lietojumprogrammā ir jābūt tikai vienam eksemplāram. Tas nozīmē, ka MyClass tiks atrisināts vienreiz un tajā būs tikai viens gadījums, kuram var piekļūt, izmantojot mainīgo my_class.

Boot() metode

Boot() metode ļauj piekļūt visiem pakalpojumiem, kas iepriekš reģistrēti, izmantojot reģistrēšanas metodi. Pēc tam varat iekļaut visu pakalpojumu savā lietojumprogrammā, izmantojot šo metodi.

Atgriežoties pie iepriekšējā piemēra, noņemsim metodi register() un iekšā boot() pievienojiet Blade direktīvas kodu:

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

Vēl viens piemērs ViewServiceProvider ņemot vērā View Composers, šeit ir fragments no oficiālās Laravel vietnes :

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

Lai palaistu, šis jaunais nodrošinātājs ir jāpievieno/jāreģistrē pakalpojumu sniedzēja masīvā 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

Jūs varētu arī interesēt:

Inovāciju biļetens
Nepalaidiet garām svarīgākās ziņas par jauninājumiem. Reģistrējieties, lai tos saņemtu pa e-pastu.

Jaunākie Raksti

Kā vislabāk kārtot datus un formulas programmā Excel, lai iegūtu kvalitatīvu analīzi

Microsoft Excel ir atsauces rīks datu analīzei, jo tas piedāvā daudzas iespējas datu kopu organizēšanai,…

14 maijā 2024

Pozitīvs secinājums diviem svarīgiem Walliance Equity kopfinansēšanas projektiem: Jesolo Wave Island un Milano Via Ravenna

Walliance, SIM un platforma starp līderiem Eiropā nekustamo īpašumu kopfinansēšanas jomā kopš 2017. gada, paziņo par…

13 maijā 2024

Kas ir kvēldiegs un kā lietot Laravel pavedienu

Filament ir "paātrināta" Laravel izstrādes sistēma, kas nodrošina vairākus pilnus komponentus. Tas ir paredzēts, lai vienkāršotu procesu…

13 maijā 2024

Mākslīgā intelekta kontrolē

«Man ir jāatgriežas, lai pabeigtu savu evolūciju: es projicēšu sevi datorā un kļūšu par tīru enerģiju. Kad apmetās…

10 maijā 2024

Google jaunais mākslīgais intelekts var modelēt DNS, RNS un "visas dzīvības molekulas"

Google DeepMind ievieš uzlabotu sava mākslīgā intelekta modeļa versiju. Jaunais uzlabotais modelis nodrošina ne tikai…

9 maijā 2024

Laravela moduļu arhitektūras izpēte

Laravel, kas slavena ar savu eleganto sintaksi un jaudīgām funkcijām, nodrošina arī stabilu pamatu moduļu arhitektūrai. Tur…

9 maijā 2024

Cisco Hypershield un Splunk iegāde Sākas jaunais drošības laikmets

Cisco un Splunk palīdz klientiem paātrināt viņu ceļu uz nākotnes drošības operāciju centru (SOC), izmantojot…

8 maijā 2024

Papildus ekonomiskajai pusei: nepārprotamās izpirkuma programmatūras izmaksas

Ransomware ir dominējusi ziņās pēdējos divus gadus. Lielākā daļa cilvēku labi apzinās, ka uzbrukumi…

6 maijā 2024