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

Mašīnmācība: Random Forest un lēmumu koka salīdzinājums

Mašīnmācības pasaulē gan nejaušiem meža, gan lēmumu koku algoritmiem ir būtiska nozīme kategorizācijā un…

17 maijā 2024

Kā uzlabot Power Point prezentācijas, noderīgi padomi

Ir daudz padomu un triku, lai izveidotu lieliskas prezentācijas. Šo noteikumu mērķis ir uzlabot efektivitāti, gludumu…

16 maijā 2024

Saskaņā ar Protolabs ziņojumu ātrums joprojām ir produkta izstrādes svira

Publicēts ziņojums "Protolabs Product Development Outlook". Izpētiet, kā šodien tirgū tiek laisti jauni produkti.…

16 maijā 2024

Četri ilgtspējības pīlāri

Termins ilgtspējība tagad tiek plaši izmantots, lai apzīmētu programmas, iniciatīvas un darbības, kuru mērķis ir saglabāt konkrētu resursu.…

15 maijā 2024

Kā konsolidēt datus programmā Excel

Jebkura biznesa darbība rada daudz datu, pat dažādās formās. Manuāli ievadiet šos datus no Excel lapas, lai…

14 maijā 2024

Cisco Talos ceturkšņa analīze: korporatīvie e-pasta ziņojumi, kuru mērķauditorija ir noziedznieki Visvairāk skartās nozares ir ražošana, izglītība un veselības aprūpe

Uzņēmuma e-pastu kompromiss 2024. gada pirmajos trīs mēnešos palielinājās vairāk nekā divas reizes, salīdzinot ar pēdējo ceturksni…

14 maijā 2024

Interfeisa segregācijas princips (ISP), ceturtais SOLID princips

Interfeisa segregācijas princips ir viens no pieciem objektorientētā dizaina SOLIDA principiem. Klasei vajadzētu būt…

14 maijā 2024

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

Lasiet Inovācijas savā valodā

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.

Seko mums