Mei oare wurden, tsjinstferlieners binne as in trechter wêrmei't wy "klasse" brânstof yn in tank skine dy't de "tsjinstkontener" hjit fan in motor mei de namme Laravel.
As wy config/app.php iepenje, sille wy in array sjen mei de namme "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,
.
.
.
],
Dit binne guon fan 'e tsjinstferlieners dy't tegearre mei laravel oanbean wurde, dus basistsjinsten dy't yn' e tsjinstkontener pleatst wurde.
service provider
wurde se útfierd?As wy sjogge nei de dokumintaasje op oanfraach lifecycle , wurde de folgjende bestannen oan it begjin útfierd:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
en sines Middlewares
Service Providers
: ynhâld fan dit artikelHokker service provider
binne se laden?
It binne dy definites yn 'e 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,
],
];
Sa't wy sjen kinne, der is in list fan service provider
net iepenbier yn 'e map /vendor
, wy moatte se net oanreitsje of feroarje. Dejingen dy't ynteressearje ús binne hjirûnder, mei BroadcastServicerProvider
standert útskeakele, wierskynlik om't it selden brûkt wurdt.
Al dizze tsjinstferlieners rinne fan boppen nei ûnderen, en werhelje de list twaris:
register()
, nuttich foar (úteinlik) it útfieren fan wat konfigureare foar de metoade boot()
.boot()
fan alle oanbieders. Nochris, ien foar ien, fan boppe nei ûnderen, fan 'e array 'providers'
.I Service Providers
opnommen yn Laravel, binne al dy oanwêzich yn de map app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Se binne allegear PHP-klassen, elk relatearre oan syn eigen ûnderwerp: App
, Auth
, Broadcasting
, Events
e Routes
. Mar se hawwe allegear ien ding mienskiplik: metoade boot()
.
Binnen dy metoade kinne wy elke koade skriuwe relatearre oan ien fan dy seksjes: auth
, events
, route
, ensfh. Mei oare wurden, tsjinstferlieners binne gewoan klassen om wat globale funksjonaliteit te registrearjen.
Se binne apart as "oanbieders" om't se heul betiid rinne yn 'e libbenssyklus fan' e applikaasje, dus wat globaal is hjir handich foardat it útfierende skript nei Modellen of Controllers komt.
De measte funksjonaliteit is yn 'e RouteServiceProvider, hjir is de koade:
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());
});
}
}
Dit is de klasse dêr't de triemmen binne konfigurearre route
, mei routes/web.php
e routes/api.php
standert opnommendefinita. Tink derom dat d'r foar de API ek ferskate konfiguraasjes binne: Einpuntprefix /api
en middleware api
foar alle routes
.
Wy kinne bewurkje de service providers
, dy't net yn 'e map steane /vendor
. It oanpassen fan dizze bestannen wurdt dien as jo in protte paden hawwe en se wolle skiede yn spesifike bestannen. Jo meitsje routes/auth.php
en set de paden dêr, dan "ynskeakelje" jo dat bestân yn 'e metoade boot()
di RouteServiceProvider
, foegje gewoan de tredde sin ta:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
it is leech. In typysk foarbyld fan it tafoegjen fan koade AppServiceProvider
, giet oer it útskeakeljen fan loai laden yn Eloquent . Om dit te dwaan, moatte jo gewoan add twa rigels yn 'e metoade boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
Dit sil in útsûndering smyt as in relaasjemodel net laden is.
service provider
maatwurkNeist de pre triemmendefinites, kinne wy maklik meitsje in nij Service Provider
, yn ferbân mei oare ûnderwerpen as dy predefiklear as auth
/event
/routes
.
In frij typysk foarbyld is de werjeftekonfiguraasje Blade
. Wy kinne in rjochtline meitsje Blade
, en foegje dan dizze koade ta yn 'e metoade boot(
) fan elk service provider
, ynklusyf de standert AppServiceProvider
. Lit ús no meitsje in ViewServiceProvider
skiede.
Wy kinne it generearje mei dit kommando:
php artisan make:provider ViewServiceProvider
Hokker sil generearje de klasse sa predefinacht:
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()
{
//
}
}
Sa't wy binnen kinne sjen, binne d'r twa metoaden:
De metoade register() lit ús definish keppelings nei ús tsjinst container. Bygelyks, yn 'e folgjende koade:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app is in globale fariabele yn laravel dy't in singleton-klasse tagong kin fia de app.
Singleton is in funksje. By it tapassen fan dizze funksje ynformearje wy de applikaasje dat hokker klasse dan ek as parameter yn 'e app trochjûn wurdt, mar ien eksimplaar moat hawwe yn 'e heule applikaasje. Dit betsjut dat MyClass ien kear oplost wurdt en mar ien eksimplaar sil hawwe, dy't tagonklik wurde kin mei de my_class fariabele.
De boot() metoade lit jo tagong krije ta alle tsjinsten dy't earder registrearre binne mei de registermetoade. Jo kinne dan de hiele tsjinst opnimme yn jo applikaasje mei dizze metoade.
Gean werom nei it foarige foarbyld, litte wy de metoade fuortsmite register()
en binnen boot()
foegje de Blade-rjochtlinekoade ta:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
In oar foarbyld fan ViewServiceProvider
oansjen View Composers
, hjir is it snippet fan 'e offisjele Laravel-side :
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) {
//
});
}
}
Om te rinnen, moat dizze nije provider wurde tafoege / registrearre oan 'e in 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
Jo kinne ek ynteressearje yn:
De marinesektor is in wiere wrâldwide ekonomyske macht, dy't navigearre is nei in merk fan 150 miljard ...
Ofrûne moandei kundige de Financial Times in deal oan mei OpenAI. FT lisinsje har sjoernalistyk fan wrâldklasse ...
Miljoenen minsken betelje foar streamingtsjinsten, beteljen moanlikse abonnemintskosten. It is gewoane miening dat jo ...
Coveware troch Veeam sil trochgean mei it leverjen fan antwurdtsjinsten foar cyberafpersing ynsidint. Coveware sil forensyske en sanearjen mooglikheden oanbiede ...