Artikoli

Fornituri tas-Servizzi f'Laravel: x'inhuma u kif tuża Fornituri tas-Servizzi f'Laravel

Il-fornituri tas-servizz Laravel huma l-post ċentrali fejn titnieda l-applikazzjoni. Jiġifieri, is-servizzi ewlenin ta 'Laravel u s-servizzi tal-applikazzjoni, il-klassijiet, u d-dipendenzi tagħhom jitqiegħdu fil-kontenitur tas-servizz permezz tal-fornituri. 

Fi kliem ieħor, il-fornituri tas-servizz huma bħal lembut li permezz tiegħu ferragħ fjuwil ta’ “klassi” f’tank imsejjaħ “container tas-servizz” ta’ magna msejħa Laravel.

eżempju

Jekk niftħu config/app.php se naraw firxa bl-isem "fornitur"

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

Dawn huma wħud mill-fornituri tas-servizz ipprovduti flimkien ma 'laravel, jiġifieri servizzi bażiċi li jitqiegħdu fil-kontenitur tas-servizz.

Meta i service provider huma mwettqa?

Jekk inħarsu lejn id-dokumentazzjoni fuq talba taċ-ċiklu tal-ħajja , il-fajls li ġejjin huma esegwiti fil-bidu:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php u tiegħu Middlewares
  • Service Providers: kontenut ta' dan l-artikolu

liema service provider huma mgħobbija? 

Huma dawk definite fil-firxa 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,
 
    ],
 
];

Kif nistgħu naraw, hemm lista ta ' service provider mhux pubbliku fil-folder /vendor, la għandna tmisshom u lanqas nimmodifikawhom. Dawk li jinteressawna huma hawn taħt, bil BroadcastServicerProvider diżattivat awtomatikament, probabbilment minħabba li rarament jintuża.

Dawn il-fornituri tas-servizz kollha jimxu minn fuq għal isfel, u jirrepetu l-lista darbtejn:

  • L-ewwel iterazzjoni qed tfittex metodu fakultattiv register(), utli biex (eventwalment) tesegwixxi xi ħaġa kkonfigurata qabel il-metodu boot().
  • it-tieni iterazzjoni tesegwixxi l-metodu boot() tal-fornituri kollha. Għal darb'oħra, wieħed wieħed, minn fuq għal isfel, tal-firxa 'providers'.
  • Fl-aħħarnett, wara li l-fornituri tas-servizz kollha jkunu ġew ipproċessati, Laravel jimxi fuq l-analiżi tal-mogħdija (rotta), iħaddem il-kontrollur, juża mudelli, eċċ.

Fornituri tas-Servizzi Laravel predefiebda

I Service Providers inklużi f'Laravel, huma dawk kollha preżenti fil-folder app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Dawn huma kollha klassijiet PHP, kull waħda relatata mas-suġġett tagħha stess: App, Auth, Broadcasting, Events e Routes. Iżda kollha għandhom ħaġa waħda komuni: il-metodu boot().

Ġewwa dak il-metodu, nistgħu niktbu kwalunkwe kodiċi relatat ma 'kwalunkwe waħda minn dawk it-taqsimiet: auth, events, route, eċċ. Fi kliem ieħor, il-Fornituri tas-Servizzi huma biss klassijiet biex jirreġistraw xi funzjonalità globali.

Huma separati bħala "fornituri" minħabba li jimxu kmieni ħafna fiċ-ċiklu tal-ħajja tal-applikazzjoni, għalhekk xi ħaġa globali hija konvenjenti hawn qabel ma l-iscript ta 'eżekuzzjoni jasal għand Mudelli jew Kontrolluri.

Ħafna mill-funzjonalità tinsab fir-RouteServiceProvider, hawn hu l-kodiċi:

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

Din hija l-klassi fejn il-fajls huma kkonfigurati route, Bl routes/web.phproutes/api.php inklużi awtomatikamentdefinita. Innota li għall-API hemm ukoll konfigurazzjonijiet differenti: Prefiss tal-endpoint /api u middleware api għal kulħadd routes.

Nistgħu neditjaw il- service providers, li mhumiex fil-folder /vendor. Customizing dawn il-fajls isir meta jkollok ħafna mogħdijiet u trid tisseparahom f'fajls speċifiċi. Inti toħloq routes/auth.php u poġġi l-mogħdijiet hemmhekk, imbagħad inti "tippermetti" dak il-fajl fil-metodu boot() di RouteServiceProvider, żid biss it-tielet sentenza:

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

AppServiceProvider huwa vojt. Eżempju tipiku ta 'żieda ta' kodiċi AppServiceProvider, huwa dwar id-diżattivazzjoni ta 'tagħbija għażżien fl Eloquent . Biex tagħmel dan, għandek bżonn biss żid żewġ linji fil-metodu boot():

Newsletter dwar l-innovazzjoni
Titlifx l-aktar aħbarijiet importanti dwar l-innovazzjoni. Irreġistra biex tirċevihom bl-email.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Dan se tarmi eċċezzjoni jekk mudell ta 'relazzjoni ma jiġix mgħobbi.

Oħloq tiegħek service provider apposta

Minbarra l-fajls ta 'qabeldefinites, nistgħu faċilment noħolqu waħda ġdida Service Provider, relatati ma’ suġġetti oħra għajr dawk predefilest bħala auth/event/routes.

Eżempju pjuttost tipiku huwa l-konfigurazzjoni tal-vista Blade. Nistgħu noħolqu direttiva Blade, u mbagħad żid dak il-kodiċi fil-metodu boot() ta’ kwalunkwe service provider, inkluż l-inadempjenza AppServiceProvider. Ejja issa noħolqu a ViewServiceProvider separati.

Nistgħu niġġenerawha b'dan il-kmand:

php artisan make:provider ViewServiceProvider

Li se jiġġenera l-klassi hekk predefilejla:

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

Kif nistgħu naraw ġewwa hemm żewġ metodi:

Il-metodu register().

Il-metodu register() jippermettilna definish links għall-kontenitur tas-servizz tagħna. Per eżempju, fil-kodiċi li ġej:

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

$this->app hija varjabbli globali f'laravel li klassi singleton tista' taċċessa permezz tal-app.

Singleton hija karatteristika. Meta napplikaw din il-karatteristika, qed ninfurmaw lill-applikazzjoni li tkun xi tkun il-klassi mgħoddija bħala parametru fl-app għandu jkollha biss istanza waħda fl-applikazzjoni kollha. Dan ifisser li MyClass se tiġi solvuta darba u se jkollha istanza waħda biss, li tista 'tiġi aċċessata bl-użu tal-varjabbli my_class.

Il-metodu boot().

Il-metodu boot() jippermettilek li taċċessa s-servizzi kollha rreġistrati qabel bl-użu tal-metodu tar-reġistru. Imbagħad tista' tinkludi s-servizz kollu fl-applikazzjoni tiegħek billi tuża dan il-metodu.

Li tmur lura għall-eżempju preċedenti, ejja neħħi l-metodu register() u ġewwa boot() żid il-kodiċi tad-direttiva Blade:

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

Eżempju ieħor ta ViewServiceProvider tikkonċerna View Composers, hawn is-snippet mis-sit uffiċjali ta' 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) {
            //
        });
    }
}

Biex jaħdem, dan il-fornitur il-ġdid irid jiġi miżjud/reġistrat mal-firxa tal-fornituri 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

Tista' tkun interessat ukoll fi:

Newsletter dwar l-innovazzjoni
Titlifx l-aktar aħbarijiet importanti dwar l-innovazzjoni. Irreġistra biex tirċevihom bl-email.

Artikoli riċenti

Veeam għandu l-aktar appoġġ komprensiv għar-ransomware, mill-protezzjoni għar-rispons u l-irkupru

Coveware minn Veeam se jkompli jipprovdi servizzi ta' rispons għal inċidenti ta' estorsjoni ċibernetika. Coveware se joffri forensiċi u kapaċitajiet ta' rimedju...

April 23 2024

Rivoluzzjoni Ekoloġika u Diġitali: Kif il-Manutenzjoni Predittiva qed tittrasforma l-Industrija taż-Żejt u l-Gass

Il-manutenzjoni ta’ tbassir qed tirrivoluzzjona s-settur taż-żejt u l-gass, b’approċċ innovattiv u proattiv għall-ġestjoni tal-impjant...

April 22 2024

Ir-regolatur tal-antitrust tar-Renju Unit iqajjem allarm ta’ BigTech fuq GenAI

Is-CMA tar-Renju Unit ħarġet twissija dwar l-imġieba ta 'Big Tech fis-suq tal-intelliġenza artifiċjali. Hemm…

April 18 2024

Casa Green: rivoluzzjoni tal-enerġija għal futur sostenibbli fl-Italja

Id-Digriet "Case Green", ifformulat mill-Unjoni Ewropea biex itejjeb l-effiċjenza enerġetika tal-bini, ikkonkluda l-proċess leġiżlattiv tiegħu bi...

April 18 2024