An anere Wierder, Déngschtleeschter si wéi en Trichter, duerch deen mir "Klass" Brennstoff an en Tank schëdden deen "Servicebehälter" vun engem Motor genannt Laravel genannt gëtt.
Wa mir config/app.php opmaachen, gesi mir eng Array mam Numm "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,
.
.
.
],
Dëst sinn e puer vun den Déngschtleeschter déi zesumme mat Laravel zur Verfügung gestallt ginn, dh Basisservicer déi am Servicecontainer plazéiert sinn.
service provider
ginn se duerchgefouert?Wa mir d'Dokumentatioun kucken op Ufro Liewenszyklus , ginn déi folgend Dateien am Ufank ausgefouert:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
a seng Middlewares
Service Providers
: Inhalt vun dësem ArtikelWéi eng service provider
sinn se gelueden?
Si sinn déi definett an der 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,
],
];
Wéi mir kënne gesinn, ass et eng Lëscht vun service provider
net ëffentlech am Dossier /vendor
, mir sollten se weder beréieren nach änneren. Déi, déi eis interesséieren sinn ënnert, mat BroadcastServicerProvider
par défaut behënnert, wahrscheinlech well et selten benotzt gëtt.
All dës Déngschtleeschter lafen vun uewe bis ënnen, widderhuelen d'Lëscht zweemol:
register()
, nëtzlech fir (schlussendlech) eppes auszeféieren konfiguréiert virun der Method boot()
.boot()
vun all Ubidder. Nach eng Kéier, een nom aneren, vun uewe bis ënnen, vun der Array 'providers'
.I Service Providers
am Laravel abegraff, sinn all déi am Dossier präsent sinn app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Si sinn all PHP-Klassen, jidderee mat sengem eegenen Thema verbonnen: App
, Auth
, Broadcasting
, Events
e Routes
. Mä si hunn all eng Saach gemeinsam: Method boot()
.
Bannent där Method kënne mir all Code am Zesummenhang mat enger vun dësen Sektiounen schreiwen: auth
, events
, route
, etc. An anere Wierder, Service Provider si just Klassen fir eng global Funktionalitéit ze registréieren.
Si sinn getrennt als "Provider" well se ganz fréi am Applikatioun Liewenszyklus lafen, also eppes global ass praktesch hei ier den ausféierende Skript op Modeller oder Controller kënnt.
Déi meescht vun der Funktionalitéit ass am RouteServiceProvider, hei ass de Code:
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());
});
}
}
Dëst ass d'Klass wou d'Dateien konfiguréiert sinn route
mat routes/web.php
e routes/api.php
Standard abegraffdefinit. Bedenkt datt fir d'API och verschidde Konfiguratiounen sinn: Endpunkt Präfix /api
an middleware api
fir jiddereen routes
.
Mir kënnen d'Ännerung änneren service providers
, déi net am Dossier sinn /vendor
. Dës Dateie personaliséieren gëtt gemaach wann Dir vill Weeër hutt a se a spezifesch Dateien trennen wëllt. Dir kreéiert routes/auth.php
a setzt d'Weeër dohinner, da "aktivéiert" Dir dës Datei an der Method boot()
di RouteServiceProvider
, füügt just den drëtte Saz derbäi:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
et ass eidel. En typescht Beispill fir Code ze addéieren AppServiceProvider
, geet drëm d'Lazy Luede an Eloquent auszeschalten. Fir dëst ze maachen, braucht Dir just dobäizemaachen zwou Linnen an der Method boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
Dëst wäert eng Ausnahm werfen wann e Bezéiungsmodell net gelueden ass.
service provider
personnaliséiertenZousätzlech zu de Pre-Dateiendefinites, kënne mir einfach eng nei eent schafen Service Provider
, Zesummenhang mat aneren Themen wéi déi Predefifäerdeg wéi auth
/event
/routes
.
E zimlech typescht Beispill ass d'Vuekonfiguratioun Blade
. Mir kënnen eng Direktiv kreéieren Blade
, a füügt dann dee Code an d'Method boot(
) vun all service provider
, dorënner de Standard AppServiceProvider
. Loosst eis elo eng ViewServiceProvider
trennen.
Mir kënnen et mat dësem Kommando generéieren:
php artisan make:provider ViewServiceProvider
Wat wäert d'Klass Generéiere sou PredefiNuecht:
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()
{
//
}
}
Wéi mir bannen kënne gesinn, ginn et zwou Methoden:
D'Register () Method erlaabt eis definish Linken op eise Service Container. Zum Beispill, am folgende Code:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->App ass eng global Variabel am Laravel, op déi eng Singleton Klass duerch d'App Zougang kann.
Singleton ass eng Feature. Wann Dir dës Feature applizéiert, informéiere mir d'Applikatioun datt egal wéi eng Klass als Parameter an der App passéiert ass nëmmen eng Instanz an der ganzer Applikatioun sollt hunn. Dëst bedeit datt MyClass eemol geléist gëtt an nëmmen eng Instanz huet, déi mat der my_class Variabel zougänglech ass.
D'Boot () Method erlaabt Iech Zougang zu all Servicer déi virdru registréiert sinn mat der Registermethod. Dir kënnt dann de ganze Service an Ärer Applikatioun mat dëser Method enthalen.
Zréck op dat viregt Beispill, loosst eis d'Method ewechhuelen register()
an bannen boot()
add the Blade Direktiv Code:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
Anert Beispill vun ViewServiceProvider
betruecht View Composers
, hei ass den Ausschnëtt vum offiziellen Laravel Site :
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) {
//
});
}
}
Fir ze lafen, muss dësen neie Fournisseur derbäigesat / registréiert ginn am Provider Array 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
Dir kënnt och interesséiert sinn:
De Marinesecteur ass eng richteg global wirtschaftlech Muecht, déi op e 150 Milliarde Maart navigéiert ass ...
De leschte Méindeg huet d'Financial Times en Deal mat OpenAI ugekënnegt. FT lizenzéiert säi Weltklass Journalismus ...
Millioune vu Leit bezuelen fir Streaming Servicer, a bezuelen monatlecht Abonnementskäschte. Et ass allgemeng Meenung datt Dir ...
Coveware vu Veeam wäert weider Cyber Erpressung Tëschefall Äntwert Servicer ubidden. Coveware wäert Forensik a Sanéierungsfäegkeeten ubidden ...