Nan lòt mo, founisè sèvis yo tankou yon antonwa kote nou vide gaz "klas" nan yon tank yo rele "resipyan sèvis" nan yon motè ki rele Laravel.
Si nou louvri config/app.php nou pral wè yon etalaj ak non "founisè a"
'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,
.
.
.
],
Sa yo se kèk nan founisè sèvis yo bay ansanm ak laravel, sa vle di sèvis debaz yo mete nan veso sèvis la.
service provider
yo fèt?Si nou gade dokiman an sou demann lavi , dosye sa yo yo egzekite nan kòmansman an:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
ak li Middlewares
Service Providers
: kontni atik sa aKi service provider
yo chaje?
Yo se sa yo definit nan etalaj la 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,
],
];
Kòm nou ka wè, gen yon lis service provider
pa piblik nan katab la /vendor
, nou pa ta dwe ni manyen ni modifye yo. Moun ki enterese nou yo anba a, avèk BroadcastServicerProvider
andikape pa default, pwobableman paske li se raman itilize.
Tout founisè sèvis sa yo kouri depi anwo jouk anba, repete lis la de fwa:
register()
, itil pou (evantyèlman) egzekite yon bagay configuré anvan metòd la boot()
.boot()
nan tout founisè yo. Ankò, youn pa youn, anwo jouk anba, nan etalaj la 'providers'
.I Service Providers
enkli nan Laravel, se tout moun ki prezan nan katab la app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Yo tout se klas PHP, yo chak ki gen rapò ak pwòp sijè pa yo: App
, Auth
, Broadcasting
, Events
e Routes
. Men, yo tout gen yon bagay an komen: metòd boot()
.
Anndan metòd sa a, nou ka ekri nenpòt kòd ki gen rapò ak nenpòt nan seksyon sa yo: auth
, events
, route
, elatriye. Nan lòt mo, Founisè Sèvis yo se jis klas pou anrejistre kèk fonksyonalite mondyal.
Yo separe kòm "founisè" paske yo kouri byen bonè nan sik lavi aplikasyon an, kidonk yon bagay global bon isit la anvan script egzekite a rive nan Modèl oswa Kontwolè.
Pifò nan fonksyonalite a se nan RouteServiceProvider la, isit la se kòd la:
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());
});
}
}
Sa a se klas la kote dosye yo konfigirasyon route
, Ak routes/web.php
e routes/api.php
enkli pa defaultdefinita. Remake byen ke pou API a gen tou konfigirasyon diferan: Prefiks Endpoint /api
ak middleware api
pou tout routes
.
Nou ka edite la service providers
, ki pa nan katab la /vendor
. Pèsonalizasyon dosye sa yo fè lè ou gen anpil chemen epi ou vle separe yo nan dosye espesifik. Ou kreye routes/auth.php
epi mete chemen yo la, Lè sa a, ou "pèmèt" fichye sa a nan metòd la boot()
di RouteServiceProvider
, jis ajoute twazyèm fraz la:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
li vid. Yon egzanp tipik nan ajoute kòd AppServiceProvider
, se sou enfimite loading parese nan Eloquent . Pou fè sa, ou jis bezwen ajoute de liy nan metòd la boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
Sa a pral voye yon eksepsyon si yon modèl relasyon pa chaje.
service provider
koutimAnplis de dosye yo predefinwit, nou ka fasilman kreye yon nouvo Service Provider
, ki gen rapò ak lòt sijè pase sa yo predefifini kòm auth
/event
/routes
.
Yon egzanp jistis tipik se konfigirasyon an View Blade
. Nou ka kreye yon direktiv Blade
, epi ajoute kòd sa a nan metòd la boot(
) nan nenpòt ki service provider
, ki gen ladan default la AppServiceProvider
. Se pou kounye a kreye yon ViewServiceProvider
separe.
Nou ka jenere li ak lòd sa a:
php artisan make:provider ViewServiceProvider
Ki pral jenere klas la konsa predefinwit:
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()
{
//
}
}
Kòm nou ka wè andedan gen de metòd:
Metòd register() pèmèt nou defifini lyen ki mennen nan veso sèvis nou an. Pou egzanp, nan kòd sa a:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app se yon varyab mondyal nan laravel ke yon klas singleton ka jwenn aksè atravè app a.
Singleton se yon karakteristik. Lè w ap aplike karakteristik sa a, n ap enfòme aplikasyon an ke kèlkeswa klas yo pase kòm yon paramèt nan aplikasyon an ta dwe gen sèlman yon egzanp nan aplikasyon an antye. Sa vle di ke MyClass pral rezoud yon fwa epi li pral gen yon sèl egzanp, ki ka jwenn aksè lè l sèvi avèk varyab my_class la.
Metòd boot() pèmèt ou jwenn aksè nan tout sèvis ki te deja anrejistre lè l sèvi avèk metòd enskri. Lè sa a, ou ka mete tout sèvis la nan aplikasyon w lan lè l sèvi avèk metòd sa a.
Tounen nan egzanp anvan an, ann retire metòd la register()
ak andedan boot()
ajoute kòd direktiv Blade:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
Yon lòt egzanp ViewServiceProvider
konsiderasyon View Composers
, Men snippet la soti nan sit ofisyèl Laravel la :
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) {
//
});
}
}
Pou kouri, nouvo founisè sa a dwe ajoute/anrejistre nan etalaj founisè a 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
Ou ka enterese tou nan:
Lendi pase a, Financial Times te anonse yon kontra ak OpenAI. FT bay lisans jounalis mondyal li...
Dè milyon de moun peye pou sèvis difizyon, peye frè abònman chak mwa. Li se opinyon komen ke ou ...
Coveware by Veeam ap kontinye bay sèvis repons pou ensidan ekstòsyon sou cyber. Coveware pral ofri medsen legal ak kapasite ratrapaj ...
Antretyen prediksyon ap revolisyone sektè lwil oliv ak gaz la, ak yon apwòch inovatè ak aktif nan jesyon plant yo.…