Teisisõnu, teenusepakkujad on nagu lehter, mille kaudu valame "klassi" kütust Laraveli-nimelise mootori "teeninduskonteineriks" kutsutavasse paaki.
Kui avame config/app.php, näeme massiivi nimega "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,
.
.
.
],
Need on mõned koos laraveliga pakutavad teenusepakkujad ehk põhiteenused, mis paigutatakse teenusekonteinerisse.
service provider
kas neid tehakse?Kui vaatame dokumentatsiooni nõudmisel elutsükkel , käivitatakse alguses järgmised failid:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
ja tema Middlewares
Service Providers
: selle artikli sisukva service provider
kas need on laetud?
Need on need definites massiivi 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,
],
];
Nagu näeme, on olemas nimekiri service provider
pole kaustas avalik /vendor
, ei tohiks me neid puudutada ega muuta. Need, mis meid huvitavad, on allpool, koos BroadcastServicerProvider
vaikimisi keelatud, tõenäoliselt seetõttu, et seda kasutatakse harva.
Kõik need teenusepakkujad jooksevad ülalt alla, korrates loendit kaks korda:
register()
, on kasulik (lõpuks) enne meetodit seadistatud asjade käivitamiseks boot()
.boot()
kõigist pakkujatest. Jällegi ükshaaval, ülevalt alla, massiivist 'providers'
.I Service Providers
Laravelis on kõik kaustas olevad isikud app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Need on kõik PHP klassid, millest igaüks on seotud oma teemaga: App
, Auth
, Broadcasting
, Events
e Routes
. Kuid neil kõigil on üks ühine joon: meetod boot()
.
Selle meetodi sees saame kirjutada mis tahes koodi, mis on seotud mis tahes nende jaotistega: auth
, events
, route
, jne. Teisisõnu, teenusepakkujad on lihtsalt klassid mõne globaalse funktsiooni registreerimiseks.
Need on "pakkujatena" eraldiseisvad, kuna töötavad väga varajases rakenduse elutsüklis, nii et midagi globaalset on siin mugav enne, kui käivitav skript jõuab mudelitesse või kontrolleritesse.
Enamik funktsioone on RouteServiceProvideris, siin on kood:
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());
});
}
}
See on klass, kus failid on konfigureeritud route
, Mis routes/web.php
e routes/api.php
vaikimisi kaasatuddefinita. Pange tähele, et API jaoks on olemas ka erinevad konfiguratsioonid: lõpp-punkti eesliide /api
ja vahevara api
kõigi jaoks routes
.
Saame redigeerida service providers
, mida kaustas pole /vendor
. Nende failide kohandamine toimub siis, kui teil on palju teid ja soovite need konkreetseteks failideks eraldada. Sina lood routes/auth.php
ja pane teed sinna, siis "lubad" selle faili meetodis boot()
di RouteServiceProvider
, lisage lihtsalt kolmas lause:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
see on tühi. Tüüpiline näide koodi lisamisest AppServiceProvider
, käsitleb laiska laadimise keelamist rakenduses Eloquent. Selleks vajate lihtsalt lisage kaks rida meetodis boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
See loob erandi, kui suhtemudelit ei laadita.
service provider
tavaLisaks eelfailideledefinites, saame hõlpsasti uue luua Service Provider
, mis on seotud muude teemadega kui need, mis on eelnevaddefilõpetanud kui auth
/event
/routes
.
Üsna tüüpiline näide on vaate konfiguratsioon Blade
. Saame koostada direktiivi Blade
ja lisage see kood meetodisse boot(
) mis tahes service provider
, sealhulgas vaikeseade AppServiceProvider
. Loome nüüd a ViewServiceProvider
eraldi.
Saame selle genereerida järgmise käsuga:
php artisan make:provider ViewServiceProvider
Mis loob klassi nii ettedefiõhtupoolik:
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()
{
//
}
}
Nagu seestpoolt näeme, on kaks meetodit:
Meetod register() võimaldab meil seda teha definish lingid meie teeninduskonteinerisse. Näiteks järgmises koodis:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app on laraveli globaalne muutuja, millele üksikklass pääseb rakenduse kaudu juurde.
Singleton on funktsioon. Selle funktsiooni rakendamisel teavitame rakendust, et mis tahes klassis, mis rakenduses parameetrina edastatakse, peaks kogu rakenduses olema ainult üks eksemplar. See tähendab, et MyClass lahendatakse üks kord ja sellel on ainult üks eksemplar, millele pääseb juurde muutuja my_class abil.
Boot() meetod võimaldab teil pääseda juurde kõikidele varem registreerimismeetodil registreeritud teenustele. Seejärel saate seda meetodit kasutades oma rakendusse kaasata kogu teenuse.
Eelmise näite juurde tagasi tulles eemaldame meetodi register()
ja sees boot()
lisage Blade'i direktiivi kood:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
Veel üks näide ViewServiceProvider
see puudutab View Composers
, siin on katkend Laraveli ametlikult saidilt :
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) {
//
});
}
}
Käitamiseks tuleb see uus pakkuja lisada/registreerida teenusepakkuja massiivi 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
Samuti võite olla huvitatud:
Veeami Coveware jätkab küberväljapressimise juhtumitele reageerimise teenuste pakkumist. Coveware pakub kohtuekspertiisi ja heastamisvõimalusi…
Ennustav hooldus muudab nafta- ja gaasisektori pöördeliseks uuendusliku ja ennetava lähenemisega tehaste juhtimisele.…
Ühendkuningriigi CMA on väljastanud hoiatuse Big Techi käitumise kohta tehisintellekti turul. Seal…
Euroopa Liidu poolt hoonete energiatõhususe suurendamiseks koostatud roheliste majade dekreet on lõpetanud oma seadusandliku protsessi…