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:
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...
Is-CMA tar-Renju Unit ħarġet twissija dwar l-imġieba ta 'Big Tech fis-suq tal-intelliġenza artifiċjali. Hemm…
Id-Digriet "Case Green", ifformulat mill-Unjoni Ewropea biex itejjeb l-effiċjenza enerġetika tal-bini, ikkonkluda l-proċess leġiżlattiv tiegħu bi...