In altri palori, i fornituri di serviziu sò cum'è un funnel à traversu quale avemu versatu carburante "classe" in un tank chjamatu "container di serviziu" di un mutore chjamatu Laravel.
Se apremu config/app.php, videremu un array cù u nome "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,
.
.
.
],
Eccu alcuni di i fornituri di servizii furniti inseme cù laravel, vale à dì i servizii basi chì sò posti in u containeru di serviziu.
service provider
sò fatti ?Se guardemu a documentazione nantu à u ciclu di vita di a dumanda , i seguenti schedari sò eseguiti à u principiu:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
è u so Middlewares
Service Providers
: cuntenutu di stu articuluChì service provider
sò carchi ?
Sò quelli definite in l'array 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,
],
];
Comu pudemu vede, ci hè una lista di service provider
micca publicu in u cartulare /vendor
, ùn duvemu nè tuccalli nè mudificà. Quelli chì ci interessanu sò sottu, cù BroadcastServicerProvider
disattivatu per difettu, probabilmente perchè hè raramente utilizatu.
Tutti issi fornituri di serviziu currenu da cima à fondu, ripetendu a lista duie volte:
register()
, utile per (eventualmente) esecutà qualcosa cunfigurata prima di u metudu boot()
.boot()
di tutti i fornitori. Di novu, unu per unu, da cima à fondu, di u array 'providers'
.I Service Providers
inclusi in Laravel, sò tutti quelli prisenti in u cartulare app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Sò tutti classi PHP, ognunu ligatu à u so propiu tema: App
, Auth
, Broadcasting
, Events
e Routes
. Ma tutti anu una cosa in cumunu: u metudu boot()
.
Dentru stu metudu, pudemu scrive qualsiasi codice in relazione à qualsiasi di queste sezioni: auth
, events
, route
, etc. In altre parolle, i Fornitori di serviziu sò solu classi per registrà alcune funziunalità glubale.
Sò separati cum'è "prestatori" perchè scorri assai prima in u ciclu di vita di l'applicazione, cusì qualcosa globale hè cunvene quì prima chì u script di esecuzione arrivi à Modelli o Controllers.
A maiò parte di e funziunalità hè in RouteServiceProvider, quì hè u codice:
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());
});
}
}
Questa hè a classa induve i schedari sò cunfigurati route
, cun routes/web.php
e routes/api.php
inclusu per difettudefinita. Nota chì per l'API ci sò ancu diverse cunfigurazioni: Prefissu endpoint /api
è middleware api
per tutti routes
.
Pudemu edità u service providers
, chì ùn sò micca in u cartulare /vendor
. A persunalizazione di sti schedari hè fatta quandu avete parechje strade è vulete separà in schedarii specifichi. Tu crea routes/auth.php
è mette i chjassi, allora "attivate" u schedariu in u metudu boot()
di RouteServiceProvider
, basta aghjunghje a terza frase:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
hè viotu. Un esempiu tipicu di aghjunghje codice AppServiceProvider
, si tratta di disattivà a carica lazy in Eloquent . Per fà questu, avete solu bisognu aghjunghje dui linii in u metudu boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
Questu hà da scaccià una eccezzioni se un mudellu di relazione ùn hè micca caricatu.
service provider
persunalizataIn più di i schedari predefinite, pudemu creà facilmente un novu Service Provider
, liate à altri temi chè quelli predefifinitu cum'è auth
/event
/routes
.
Un esempiu abbastanza tipicu hè a cunfigurazione di vista Blade
. Pudemu creà una direttiva Blade
, è dopu aghjunghje stu codice in u metudu boot(
) di qualcunu service provider
, cumpresu u default AppServiceProvider
. Ora criemu un ViewServiceProvider
separatu.
Pudemu generà cù questu cumandamentu:
php artisan make:provider ViewServiceProvider
Chì generà a classa cusì predefinotte:
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()
{
//
}
}
Comu pudemu vede à l'internu, ci sò dui metudi:
U metudu register() ci permette defiligami finiti à u nostru containeru di serviziu. Per esempiu, in u codice seguente:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app hè una variabile globale in laravel chì una classa singleton pò accede à traversu l'app.
Singleton hè una caratteristica. Quandu applicà sta funzione, informemu à l'applicazione chì qualunque classa hè passata cum'è paràmetru in l'app deve avè solu una istanza in tutta l'applicazione. Questu significa chì MyClass serà risolta una volta è avarà una sola istanza, chì pò esse accede cù a variabile my_class.
U metudu boot() permette di accede à tutti i servizii registrati prima cù u metudu di registru. Pudete tandu include tuttu u serviziu in a vostra applicazione cù stu metudu.
Riturnendu à l'esempiu precedente, sguassemu u metudu register()
è dentru boot()
aghjunghje u codice di 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'); ?>";
});
}
Un altru esempiu di ViewServiceProvider
riguardu View Composers
, eccu u snippet da u situ ufficiale di 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) {
//
});
}
}
Per eseguisce, stu novu fornitore deve esse aghjuntu / arregistratu à l'array in provider 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
Pudete ancu esse interessatu in:
Sviluppà e cumpetenze di u mutore fine attraversu u culore prepara i zitelli per e cumpetenze più cumplesse cum'è a scrittura. Per culori…
U settore navale hè un veru putere ecunomicu glubale, chì hà navigatu versu un mercatu di 150 miliardi ...
Lunedì, u Financial Times hà annunziatu un accordu cù OpenAI. FT licenze u so ghjurnalismu mundiale ...
Milioni di persone paganu per i servizii di streaming, paghendu tariffi di abbonamentu mensili. Hè una opinione cumuna chì voi ...