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.
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.
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-artikoluliema 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:
register()
, utli biex (eventwalment) tesegwixxi xi ħaġa kkonfigurata qabel il-metodu boot()
.boot()
tal-fornituri kollha. Għal darb'oħra, wieħed wieħed, minn fuq għal isfel, tal-firxa 'providers'
.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.php
e routes/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()
:
// 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.
service provider
appostaMinbarra 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() 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() 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:
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...
Miljuni ta 'nies iħallsu għal servizzi ta' streaming, iħallsu miżati ta 'abbonament ta' kull xahar. Hija opinjoni komuni li inti...
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...
Il-manutenzjoni ta’ tbassir qed tirrivoluzzjona s-settur taż-żejt u l-gass, b’approċċ innovattiv u proattiv għall-ġestjoni tal-impjant...