Izihloko

Abahlinzeki Besevisi eLaravel: ukuthi bayini nokuthi basetshenziswa kanjani Abahlinzeki Besevisi eLaravel

Abahlinzeki bezinsizakalo zeLaravel bayindawo emaphakathi lapho isicelo siqalwa khona. Okusho ukuthi, izinsizakalo eziyinhloko ze-Laravel nezinsizakalo zohlelo lokusebenza, amakilasi, nokuncika kwawo kufakwa esitsheni sesevisi ngabahlinzeki. 

Ngamanye amazwi, abahlinzeki besevisi bafana nefaneli lapho sithela khona uphethiloli "wezinga" ethangini elibizwa ngokuthi "isitsha sesevisi" senjini ebizwa ngeLaravel.

Ngokwesibonelo

Uma sivula i-config/app.php sizobona uhlu olunegama elithi "umnikezeli"

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

Laba abanye babahlinzeki bezinsizakalo abahlinzekwa kanye ne-laravel, okungukuthi izinsiza eziyisisekelo ezifakwa esitsheni sesevisi.

Lapho i service provider ziyenziwa?

Uma sibheka imibhalo ngesicelo somjikelezo wokuphila , amafayela alandelayo asetshenziswa ekuqaleni:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php neyakhe Middlewares
  • Service Providers: okuqukethwe kwalesi sihloko

Yikuphi service provider zilayishiwe? 

Yibo labo definites ngokulandelana 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,
 
    ],
 
];

Njengoba sibona, kukhona uhlu service provider hhayi esidlangalaleni kufolda /vendor, akufanele sizithinte noma siziguqule. Ezisithakaselayo zingezansi, nge BroadcastServicerProvider ikhutshazwe ngokuzenzakalelayo, mhlawumbe ngenxa yokuthi ayivami ukusetshenziswa.

Bonke laba bahlinzeki besevisi basuka phezulu baye phansi, bephinda uhlu kabili:

  • Ukuphindaphinda kokuqala kubheka indlela yokuzikhethela register(), iwusizo (ekugcineni) ekusebenziseni okuthile okulungiselelwe ngaphambi kwendlela boot().
  • ukuphindaphinda kwesibili kusebenzisa indlela boot() kubo bonke abahlinzeki. Futhi, ngakunye, phezulu kuya phansi, kwamalungu afanayo 'providers'.
  • Ekugcineni, ngemva kokuba bonke abahlinzeki besevisi sebecubunguliwe, i-Laravel iqhubekela phambili ekuhlukaniseni indlela (umzila), isebenzisa isilawuli, isebenzisa izifanekiso, njll.

Abahlinzeki Besevisi i-Laravel predefiniti

I Service Providers kufakwe kuLaravel, bonke abakhona kufolda app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Wonke angamakilasi e-PHP, ngalinye lihlobene nesihloko salo: App, Auth, Broadcasting, Events e Routes. Kodwa bonke banento eyodwa abafana ngayo: indlela boot().

Ngaphakathi kwaleyo ndlela, singabhala noma iyiphi ikhodi ehlobene nanoma yisiphi salezo zigaba: auth, events, route, njll. Ngamanye amazwi, Abahlinzeki Besevisi bangamakilasi nje okubhalisa umsebenzi othile womhlaba.

Ahlukene "njengabahlinzeki" ngenxa yokuthi asebenza ngaphambi kwesikhathi somjikelezo wokuphila wohlelo lokusebenza, ngakho-ke into ethile yomhlaba wonke ekahle lapha ngaphambi kokuthi umbhalo osayindayo ufike kumamodeli noma Izilawuli.

Iningi lemisebenzi liku-RouteServiceProvider, nansi ikhodi:

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

Lesi yisigaba lapho amafayela acushwa khona route, nge routes/web.phproutes/api.php kufakwe ngokuzenzakaleladefinita. Qaphela ukuthi ku-API kukhona nokucushwa okuhlukile: Isiqalo se-Endpoint /api kanye ne-middleware api kwabo bonke routes.

Singahlela i service providers, ezingekho kufolda /vendor. Ukwenza ngendlela oyifisayo lawa mafayela kwenziwa uma unemizila eminingi futhi ufuna ukuwahlukanisa abe amafayela athile. Uyadala routes/auth.php bese ubeka izindlela lapho, bese "unika amandla" lelo fayela ngendlela boot() di RouteServiceProvider, mane ungeze umusho wesithathu:

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

AppServiceProvider ayinalutho. Isibonelo esijwayelekile sokwengeza ikhodi AppServiceProvider, imayelana nokukhubaza ukulayishwa kwevila ku-Eloquent. Ukuze wenze lokhu, udinga nje engeza imigqa emibili endleleni boot():

Innovation newsletter
Ungaphuthelwa yizindaba ezibaluleke kakhulu zokuqamba. Bhalisa ukuze uthole nge-imeyili.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Lokhu kuzokhipha okuhlukile uma imodeli yobudlelwano ingalayishiwe.

Dala eyakho service provider ngokwezifiso

Ngaphezu kwamafayela angaphambilidefinites, singakha kalula entsha Service Provider, ezihlobene nezinye izihloko kunalezo ezanduleledefiqeda njenge auth/event/routes.

Isibonelo esijwayelekile ukucushwa kokubuka Blade. Singakha isiqondiso Blade, bese wengeza leyo khodi endleleni boot() yanoma yikuphi service provider, okuhlanganisa okumisiwe AppServiceProvider. Manje ake sakhe a ViewServiceProvider hlukana.

Singayikhiqiza ngalo myalo:

php artisan make:provider ViewServiceProvider

Okuzokwenza iklasi libe predefiusuku:

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

Njengoba sibona ngaphakathi kunezindlela ezimbili:

Irejista() indlela

Irejista() indlela isivumela ukuthi definish izixhumanisi ezitsheni zethu zesevisi. Isibonelo, kukhodi elandelayo:

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

I-$this->app iyinguquko yomhlaba wonke ku-laravel isigaba se-singleton esingafinyelela kuso ngohlelo lokusebenza.

I-Singleton iyisici. Uma sisebenzisa lesi sici, sazisa uhlelo lokusebenza ukuthi noma isiphi isigaba esiphasiswa njengepharamitha kuhlelo lokusebenza kufanele sibe nesenzakalo esisodwa kuphela kulo lonke uhlelo lokusebenza. Lokhu kusho ukuthi i-MyClass izoxazululwa kanye futhi izoba nesenzakalo esisodwa kuphela, esingafinyelelwa kusetshenziswa i-my_class variable.

Indlela yokuqalisa ()

Indlela yokuqalisa () ikuvumela ukuthi ufinyelele kuzo zonke izinsiza ezibhaliswe ngaphambilini usebenzisa indlela yokubhalisa. Ungabese ufaka yonke isevisi kuhlelo lwakho lokusebenza usebenzisa le ndlela.

Ukubuyela esibonelweni sangaphambilini, ake sisuse indlela register() nangaphakathi boot() engeza ikhodi yokuqondisa ye-Blade:

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

Esinye isibonelo se ViewServiceProvider hlonipha View Composers, nali amazwibela kusuka kusayithi elisemthethweni laseLaravel :

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

Ukuze iqalise, lo mhlinzeki omusha kufanele engezwe/abhaliswe kuhlelo lwabahlinzeki 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

Ungase futhi ube nentshisekelo kokuthi:

Innovation newsletter
Ungaphuthelwa yizindaba ezibaluleke kakhulu zokuqamba. Bhalisa ukuze uthole nge-imeyili.

Izihloko zakamuva

I-Veeam ifaka ukusekelwa okuphelele kakhulu kwe-ransomware, kusukela ekuvikelweni kuya ekuphenduleni nasekululameni

I-Coveware ye-Veeam izoqhubeka nokuhlinzeka ngezinsizakalo zokuphendula izigameko zokuntshontshwa kwe-inthanethi. I-Coveware izohlinzeka ngama-forensics kanye nekhono lokulungisa…

23 April 2024

Inguquko Eluhlaza Nedijithali: Indlela Ukugcinwa Okubikezelwayo Kuyiguqula Kanjani Imboni Kawoyela Negesi

Ukulungiswa okuqagelayo kuguqula umkhakha kawoyela negesi, ngendlela emisha nesebenzayo yokuphatha izitshalo.…

22 April 2024

Isilawuli se-antitrust sase-UK siphakamisa i-alamu ye-BigTech nge-GenAI

I-CMA yase-UK ikhiphe isexwayiso mayelana nokuziphatha kwe-Big Tech emakethe yezobunhloli bokwenziwa. Lapho…

18 April 2024

I-Casa Green: inguquko yamandla yekusasa elisimeme e-Italy

Isinqumo esithi "Case Green", esakhiwe yi-European Union ukuze kuthuthukiswe ukusebenza kahle kwamandla ezakhiwo, siphothule inqubo yaso yomthetho ngokuthi...

18 April 2024