amanqaku

Ababoneleli ngeNkonzo eLaravel: yintoni abayiyo kunye nendlela yokusebenzisa abaBoneleli beNkonzo eLaravel

Ababoneleli ngeenkonzo zeLaravel bayindawo esembindini apho isicelo siqaliswa khona. Oko kukuthi, iinkonzo eziphambili zeLaravel kunye neenkonzo zesicelo, iiklasi, kunye nokuxhomekeka kwazo zibekwe kwisitya senkonzo ngababoneleli. 

Ngamanye amazwi, ababoneleli ngenkonzo bafana nefuneli esigalela ngayo amafutha "eklasi" kwitanki ebizwa ngokuba "yinkonkxa yenkonzo" yenjini ebizwa ngokuba yiLaravel.

umzekelo

Ukuba sivula i-config/app.php siya kubona uluhlu 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,
        .
        .
        .
],

Aba ngababoneleli-nkonzo ababonelelwa kunye nelaravel, o.k.t. iinkonzo ezisisiseko ezibekwe kwisikhongozeli senkonzo.

Xa ndi service provider ziyenziwa?

Ukuba sijonga amaxwebhu ngesicelo somjikelo wobomi , ezi fayile zilandelayo ziyenziwa ekuqaleni:

  • public/index.php
  • bootstrap/app.php
  • app/Http/Kernel.php kunye neyakhe Middlewares
  • Service Providers: Umxholo weli nqaku

I-Quali service provider zilayishiwe? 

Ngabo abo defiifakwe kuluhlu 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,
 
    ],
 
];

Njengoko sibona, kukho uluhlu lwe service provider hayi esidlangalaleni kwisiqulathi seefayili /vendor, asifanele sizichukumise okanye siziguqule. Abo banomdla kuthi bangezantsi, nge BroadcastServicerProvider ikhubaziwe ngokungagqibekanga, mhlawumbi ngenxa yokuba ayifane isetyenziswe.

Bonke aba baboneleli-nkonzo baqhuba ukusuka phezulu ukuya ezantsi, bephinda uluhlu Kabini:

  • Uphinda-phindo lokuqala lukhangela indlela yokhetho register(), luncedo ku (ekugqibeleni) ukuphumeza into eqwalaselweyo phambi kwendlela boot().
  • uphinda-phindo lwesibini lwenza indlela boot() kubo bonke ababoneleli. Kwakhona, enye enye, phezulu ukuya ezantsi, kuluhlu 'providers'.
  • Ekugqibeleni, emva kokuba bonke abanikezeli benkonzo becutshungulwe, iLaravel iqhubela phambili ekwahlulahluleni indlela (indlela), iqhuba umlawuli, isebenzisa iitemplates, njl.

Ababoneleli ngeNkonzo uLaravel ngaphambilidefinokuba kunjalo

I Service Providers Ibandakanyiwe kwiLaravel, ngabo bonke abakhoyo kwifolda app/Providers:

  • AppServiceProvider
  • AuthServiceProvider
  • BroadcastServiceProvider
  • EventServiceProvider
  • RouteServiceProvider

Zizo zonke iiklasi ze-PHP, nganye inxulumene nesihloko sayo: App, Auth, Broadcasting, Events e Routes. Kodwa bonke banento enye abafana ngayo: indlela boot().

Ngaphakathi kwaloo ndlela, sinokubhala nayiphi na ikhowudi enxulumene naliphi na kula macandelo: auth, events, route, njl. Ngamanye amazwi, abaBoneleli beNkonzo ziiklasi nje zokubhalisa umsebenzi othile wehlabathi.

Bohlukene "njengababoneleli" kuba babaleka kwangoko kakhulu kumjikelo wobomi besicelo, ke into yehlabathi ilungile apha phambi kokuba iskripthi esiphumezayo sifike kwiiModeli okanye kubalawuli.

Uninzi lomsebenzi kwi-RouteServiceProvider, nantsi ikhowudi:

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

Olu ludidi apho iifayile ziqwalaselwe khona routenge routes/web.phproutes/api.php ibandakanywe ngokungagqibekangadefinita. Qaphela ukuba kwi-API kukho kwakhona ulungelelwaniso olwahlukileyo: I-endpoint prefix /api kunye ne-middleware api yabo bonke routes.

Singayihlela i service providers, ezingekho kwisiqulathi seefayili /vendor. Ukwenza ezi fayile ngokwezifiso kwenziwa xa uneendlela ezininzi kwaye ufuna ukuzahlula kwiifayile ezithile. Uyadala routes/auth.php kwaye ubeke iindlela apho, emva koko "yenza" loo fayile kwindlela boot() di RouteServiceProvider, yongeza nje isivakalisi sesithathu:

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

AppServiceProvider ayinamntu. Umzekelo oqhelekileyo wokongeza ikhowudi AppServiceProvider, imalunga nokukhubaza ukulayisha ukonqena kwi-Eloquent. Ukwenza oku, kufuneka nje yongeza imigca emibini kwindlela boot():

Ileta yeendaba entsha
Ungaphoswa zezona ndaba zibalulekileyo kutshintsho. Bhalisa ukuze uzifumane nge-imeyile.
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
 
public function boot()
{
    Model::preventLazyLoading(! $this->app->isProduction());
}

Oku kuya kuphosa ngaphandle ukuba imodeli yobudlelwane ayilayishwanga.

Yenza eyakho service provider ngentando

Ukongeza kwi-predefisele zifakiwe, sinokwenza ngokulula entsha Service Provider, ngokunxulumene nezinye izihloko kunezo zangaphambilidefiicace njenge auth/event/routes.

Umzekelo oqhelekileyo kuqwalaselo lwemboniselo Blade. Sinokuyila isikhokelo Blade, kwaye wongeze loo khowudi kwindlela boot() kuyo nayiphi na service provider, kubandakanywa nokungagqibekanga AppServiceProvider. Masidale ngoku ViewServiceProvider hlukana.

Sinokuyivelisa ngalo myalelo:

php artisan make:provider ViewServiceProvider

Okuza kuvelisa iklasi kwangaphambilidefiNONE

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

Njengoko sibona ngaphakathi kukho iindlela ezimbini:

Irejista () indlela

Irejista () indlela iyasivumela ukuba defivala amakhonkco kwisikhongozeli sethu senkonzo. Umzekelo, kule khowudi ilandelayo:

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

$ this->app is a global variable in laravel that class singleton can access through the app.

I-Singleton luphawu. Xa usebenzisa eli nqaku, sazisa isicelo ukuba nayiphi na iklasi egqithisiweyo njengeparamitha kwi-app kufuneka ibe nomzekelo omnye kwisicelo sonke. Oku kuthetha ukuba iMyClass iya kusonjululwa kube kanye kwaye iya kuba nomzekelo omnye kuphela, onokufikelelwa kusetyenziswa i-my_class variable.

Indlela yokuqalisa ()

Indlela yokuqalisa () ikuvumela ukuba ufikelele kuzo zonke iinkonzo ezibhalisiweyo ngaphambili usebenzisa indlela yokubhalisa. Ungabandakanya yonke inkonzo kwisicelo sakho usebenzisa le ndlela.

Ukubuyela kumzekelo wangaphambili, masisuse indlela register() nangaphakathi boot() yongeza ikhowudi yomyalelo weBlade:

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

Omnye umzekelo we ViewServiceProvider imbeko View Composers, nasi isiqwengana ukusuka kwindawo esemthethweni yeLaravel :

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 usebenze, lo mboneleli omtsha kufuneka wongezwe/abhaliswe kuluhlu lwababoneleli 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

Usenokuba nomdla koku:

Ileta yeendaba entsha
Ungaphoswa zezona ndaba zibalulekileyo kutshintsho. Bhalisa ukuze uzifumane nge-imeyile.

Amanqaku amva

I-Veeam ibonakalisa eyona nkxaso ibanzi ye-ransomware, ukusuka ekukhuselweni ukuya ekuphenduleni nasekubuyiseni

I-Coveware nguVeeam iya kuqhubeka nokubonelela ngeenkonzo zokuphendula ngeziganeko zokuxhwilwa kwe-cyber. I-Coveware iya kubonelela nge-forensics kunye nezakhono zokulungisa…

23 Aprili 2024

Uguquko oluLuhlaza kunye neDijithali: Njani uLondolozo oluCwangcisiweyo oluTshintsho kwishishini le-oyile negesi

Ugcino oluqikelelweyo luguqula icandelo le-oyile negesi, ngenkqubo entsha nesebenzayo kulawulo lwemizi-mveliso.…

22 Aprili 2024

Umlawuli we-antitrust wase-UK uphakamisa i-alam ye-BigTech ngaphezulu kwe-GenAI

I-CMA yase-UK ikhuphe isilumkiso malunga nokuziphatha kweBig Tech kwimarike yobukrelekrele bokwenziwa. Pha…

18 Aprili 2024

ICasa Green: inguqu yamandla kwikamva elizinzileyo e-Itali

Umthetho we "Green Houses", oqulunqwe yiManyano yaseYurophu ukomeleza amandla ombane kwizakhiwo, ugqibezele inkqubo yowiso mthetho nge…

18 Aprili 2024