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

Il-pubblikaturi u l-OpenAI jiffirmaw ftehimiet biex jirregolaw il-fluss tal-informazzjoni pproċessata mill-Intelliġenza Artifiċjali

It-Tnejn li għadda, il-Financial Times ħabbret ftehim mal-OpenAI. FT tagħti liċenzja għall-ġurnaliżmu ta’ klassi dinjija tagħha...

April 30 2024

Ħlasijiet Online: Hawn Kif Is-Servizzi ta' Streaming Jagħmel Inti Tħallas Għal Dejjem

Miljuni ta 'nies iħallsu għal servizzi ta' streaming, iħallsu miżati ta 'abbonament ta' kull xahar. Hija opinjoni komuni li inti...

April 29 2024

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