Dina basa sejen, panyadia ladenan téh kawas corong ngaliwatan nu urang tuang suluh "kelas" kana tank disebut "wadah jasa" mesin disebut Laravel.
Lamun urang muka config/app.php urang bakal ningali hiji Asép Sunandar Sunarya kalawan nami "panyadia"
'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,
.
.
.
],
Ieu mangrupikeun sababaraha panyadia ladenan anu disayogikeun sareng laravel, nyaéta jasa dasar anu disimpen dina wadah jasa.
service provider
aranjeunna dilaksanakeun?Lamun urang nempo dokuméntasi on pamundut lifecycle , file di handap ieu dijalankeun dina mimiti:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
sareng na Middlewares
Service Providers
: eusi artikel ieuKang service provider
aranjeunna dimuat?
Éta maranéhanana definites dina Asép Sunandar Sunarya 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,
],
];
Sakumaha urang tiasa tingali, aya daptar service provider
teu publik dina folder /vendor
, urang henteu kedah nyabak atanapi ngarobih aranjeunna. Jalma anu dipikaresep ku urang handap, jeung BroadcastServicerProvider
ditumpurkeun sacara standar, meureun sabab jarang dipaké.
Sadaya panyadia ladenan ieu ngajalankeun ti luhur ka handap, malikan daptar dua kali:
register()
, mangpaat pikeun (antukna) ngalaksanakeun hal anu dikonpigurasi sateuacan metodeu boot()
.boot()
sadaya panyadia. Deui, hiji-hiji, luhur ka handap, tina susunan 'providers'
.I Service Providers
kaasup dina Laravel, nyaeta sakabeh jalma anu aya dina polder app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Éta sadayana kelas PHP, masing-masing aya hubunganana sareng topikna sorangan: App
, Auth
, Broadcasting
, Events
e Routes
. Tapi aranjeunna sadayana gaduh hiji hal anu umum: metode boot()
.
Di jero metode éta, urang tiasa nyerat kode naon waé anu aya hubunganana sareng bagian-bagian éta: auth
, events
, route
, jsb. Kalayan kecap sanésna, Panyadia Ladénan ngan ukur kelas pikeun ngadaptarkeun sababaraha fungsionalitas global.
Aranjeunna misah salaku "panyadia" sabab ngajalankeun pisan mimiti dina lifecycle aplikasi, jadi hal global merenah didieu saméméh skrip executing meunang Models atanapi Controllers.
Kaseueuran pungsionalitasna aya dina RouteServiceProvider, ieu kodeu:
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());
});
}
}
Ieu mangrupikeun kelas dimana file dikonpigurasi route
jeung routes/web.php
e routes/api.php
kaasup sacara standardefinita. Catet yén pikeun API ogé aya konfigurasi anu béda: Awalan Endpoint /api
jeung middleware api
pikeun sakabéh routes
.
Urang tiasa ngedit service providers
, nu teu aya dina folder /vendor
. Nyaluyukeun file ieu dilakukeun nalika anjeun gaduh seueur jalur sareng hoyong misahkeun kana file khusus. Anjeun nyiptakeun routes/auth.php
sareng nempatkeun jalur éta, teras anjeun "ngaktipkeun" file éta dina metodeu boot()
di RouteServiceProvider
, tambahkeun kalimah katilu:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
éta kosong. Hiji conto has pikeun nambahkeun kode AppServiceProvider
, nyaeta ngeunaan nganonaktipkeun puguh loading dina Eloquent. Jang ngalampahkeun ieu, anjeun ngan perlu tambahkeun dua garis dina métode boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
Ieu bakal buang iwal lamun model hubungan teu dimuat.
service provider
ngaropéaSajaba ti file predefinites, urang bisa kalayan gampang nyieun nu anyar Service Provider
, patali jeung jejer sejenna ti maranéhanana predefiréngsé salaku auth
/event
/routes
.
Conto anu cukup umum nyaéta konfigurasi tampilan Blade
. Urang tiasa ngadamel diréktif Blade
, teras tambahkeun kode éta kana metodeu boot(
) tina sagala service provider
, kaasup standar AppServiceProvider
. Hayu urang ayeuna nyieun a ViewServiceProvider
misahkeun.
Urang tiasa ngahasilkeun éta kalayan paréntah ieu:
php artisan make:provider ViewServiceProvider
Nu bakal ngahasilkeun kelas jadi predefipeuting:
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()
{
//
}
}
Sakumaha urang tingali di jero aya dua metode:
Metodeu register () ngamungkinkeun urang pikeun definish Tumbu ka wadahna jasa kami. Contona, dina kode handap:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app mangrupikeun variabel global dina laravel anu tiasa diaksés ku kelas tunggal ngalangkungan aplikasi.
Singleton mangrupikeun fitur. Nalika nerapkeun fitur ieu, kami nginpokeun ka aplikasi yén kelas naon waé anu disalurkeun salaku parameter dina aplikasi ngan ukur gaduh hiji conto dina sadaya aplikasi. Ieu ngandung harti yén MyClass bakal direngsekeun sakali sarta bakal boga ngan hiji conto, nu bisa diaksés maké variabel my_class.
Metodeu boot () ngamungkinkeun anjeun ngaksés sadaya jasa anu kadaptar sateuacana nganggo metode register. Anjeun teras tiasa ngalebetkeun sadayana jasa dina aplikasi anjeun nganggo metode ieu.
Balik deui ka conto sateuacana, hayu urang hapus metodeu register()
jeung jero boot()
tambahkeun kode diréktif Blade:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
conto sejen tina ViewServiceProvider
hal View Composers
, ieu snippet ti situs resmi 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) {
//
});
}
}
Pikeun ngajalankeun, panyadia anyar ieu kudu ditambahkeun/didaptarkeun kana di array panyadia 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
Anjeun tiasa ogé resep:
Sektor angkatan laut mangrupikeun kakuatan ékonomi global anu leres, anu nuju ka arah pasar 150 milyar ...
Senén kamari, Financial Times ngumumkeun deal sareng OpenAI. FT ngalisensikeun jurnalisme kelas dunya na…
Jutaan jalma mayar jasa streaming, mayar biaya langganan bulanan. Pendapat umum yén anjeun…
Coveware ku Veeam bakal terus nyayogikeun jasa réspon kajadian cyber extortion. Coveware bakal nawiskeun kamampuan forensik sareng remediasi…