Raha lazaina amin'ny teny hafa, ny mpanome tolotra dia toy ny fantson-tsolika izay handatsahantsika solika "kilasy" ao anaty tankina antsoina hoe "container service" an'ny motera antsoina hoe Laravel.
Raha manokatra config/app.php isika dia hahita array misy ny anarana hoe "mpanome"
'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,
.
.
.
],
Ireto ny sasany amin'ireo mpanome tolotra omena miaraka amin'ny laravel, izany hoe tolotra fototra izay apetraka ao anaty fitoeran'ny serivisy.
service provider
atao ve ireny?Raha jerena ny antontan-taratasy amin'ny fangatahana tsingerin'ny fiainana , ireto rakitra manaraka ireto dia tanterahina amin'ny fanombohana:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
ary ny azy Middlewares
Service Providers
: votoatin'ity lahatsoratra ityQual service provider
misy entana ve izy ireo?
Izy ireo dia ireo definites ao amin'ny 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,
],
];
Araka ny hitantsika dia misy ny lisitry ny service provider
tsy ampahibemaso ao amin'ny lahatahiry /vendor
, tsy tokony hikasika na hanova azy ireo isika. Ireo izay mahaliana antsika dia eto ambany, miaraka amin'ny BroadcastServicerProvider
kilemaina amin'ny alàlan'ny default, angamba satria mahalana no ampiasaina.
Ireo mpanome tolotra rehetra ireo dia mihazakazaka hatrany ambony ka hatrany ambany, mamerina ny lisitra indroa:
register()
, mahasoa amin'ny (amin'ny farany) manatanteraka zavatra voarindra alohan'ny fomba boot()
.boot()
amin'ny mpamatsy rehetra. Averina indray, tsirairay avy, ambony ka hatrany ambany, amin'ny array 'providers'
.I Service Providers
tafiditra ao amin'ny Laravel, dia ireo rehetra ao amin'ny lahatahiry app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
Kilasy PHP avokoa izy ireo, samy mifandray amin'ny lohahevitra manokana: App
, Auth
, Broadcasting
, Events
e Routes
. Saingy misy zavatra iray iraisan'izy rehetra: fomba boot()
.
Ao anatin'io fomba io, afaka manoratra fehezan-dalàna mifandraika amin'ny iray amin'ireo fizarana ireo isika: auth
, events
, route
, sns. Raha lazaina amin'ny teny hafa, ny Mpanome serivisy dia kilasy fotsiny mba hisoratra anarana fampiasa manerantany.
Misaraka amin'ny maha "mpanome" azy ireo izy ireo satria mandeha aloha be amin'ny tsingerin'ny fiainana amin'ny fampiharana, ka misy zavatra eran-tany mety eto alohan'ny hahatongavan'ny script mpanatanteraka amin'ny Models na Controllers.
Ny ankamaroan'ny fampiasa dia ao amin'ny RouteServiceProvider, ity ny 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());
});
}
}
Ity no kilasy misy ny rakitra voarindra route
amin'ny routes/web.php
e routes/api.php
tafiditra ao amin'ny defaultdefinita. Mariho fa ho an'ny API dia misy ihany koa ny tefy hafa: Tovona Endpoint /api
ary middleware api
ho an'ny rehetra routes
.
Afaka manova ny service providers
, izay tsy ao anaty lahatahiry /vendor
. Ny fanamboarana ireo rakitra ireo dia atao rehefa manana lalana maro ianao ary te hanasaraka azy ireo ho rakitra manokana. Mamorona ianao routes/auth.php
ary apetraho eo ny lalana, avy eo dia "avelanao" io rakitra io amin'ny fomba boot()
di RouteServiceProvider
, ampio fotsiny ny fehezanteny fahatelo:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
foana io. Ohatra mahazatra amin'ny fampidirana kaody AppServiceProvider
, dia momba ny fanafoanana ny fisintahana malaina amin'ny Eloquent. Mba hanaovana izany dia mila fotsiny ianao ampio andalana roa amin'ny fomba boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
Izany dia hanipy fanavahana raha toa ka tsy feno ny modely fifandraisana.
service provider
namboarinaAnkoatra ny rakitra mialohadefinites, afaka mamorona vaovao mora foana isika Service Provider
, mifandraika amin'ny lohahevitra hafa ankoatr'ireo predefivita toy ny auth
/event
/routes
.
Ohatra iray mahazatra dia ny fikirakirana fijery Blade
. Afaka mamorona torolàlana isika Blade
, ary ampidiro ao amin'ny fomba io kaody io boot(
) na inona na inona service provider
, anisan'izany ny default AppServiceProvider
. Andeha isika hamorona a ViewServiceProvider
misaraka.
Afaka mamorona azy amin'ny alalan'ity baiko ity isika:
php artisan make:provider ViewServiceProvider
Izay hiteraka ny kilasy ka predefialina:
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()
{
//
}
}
Araka ny hitantsika ao anatiny dia misy fomba roa:
Ny fomba fisoratana anarana () dia mamela antsika definish rohy mankany amin'ny fitoeran'ny serivisy. Ohatra, amin'ny code manaraka:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app dia faribolana manerantany amin'ny laravel izay azon'ny kilasy tokana idirana amin'ny alàlan'ny fampiharana.
Singleton dia singa iray. Rehefa mampihatra an'io endri-javatra io izahay dia mampahafantatra ny fampiharana fa na inona na inona kilasy alefa ho mari-pamantarana ao amin'ny app dia tokony hanana ohatra iray ihany amin'ny fampiharana iray manontolo. Midika izany fa ny MyClass dia ho voavaha indray mandeha ary tsy hanana afa-tsy ohatra iray, izay azo idirana amin'ny fampiasana ny my_class variable.
Ny fomba boot() dia ahafahanao miditra amin'ny serivisy rehetra voasoratra anarana taloha tamin'ny alàlan'ny fomba fisoratana anarana. Azonao atao ny mampiditra ny serivisy manontolo amin'ny fampiharana anao amin'ny fampiasana ity fomba ity.
Miverina amin'ny ohatra teo aloha, andao esorina ny fomba register()
ary ao anatiny boot()
ampio ny code Directive Blade:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
Ohatra iray hafa amin'ny ViewServiceProvider
mijery View Composers
, ity ny sombiny avy amin'ny tranokala ofisialy 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) {
//
});
}
}
Mba hampandehanana dia tsy maintsy ampiana/misoratra anarana amin'ny laharan'ny mpamatsy ity mpamatsy vaovao ity 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
Mety ho liana amin'ny:
Ny alatsinainy lasa teo, nanambara fifanarahana tamin'ny OpenAI ny Financial Times. Ny FT dia manome alalana ny asa fanaovan-gazety manerantany…
Olona an-tapitrisany no mandoa serivisy streaming, mandoa saram-pamandrihana isam-bolana. Hevitra mahazatra fa ianao…
Ny Coveware avy amin'i Veeam dia hanohy hanome tolotra famaliana trangan-javatra an-tserasera. Ny Coveware dia hanolotra fahaiza-manao forensika sy fanavaozana…
Ny fikojakojana mialoha dia manova ny sehatry ny solika sy entona, miaraka amin'ny fomba fiasa vaovao sy mavitrika amin'ny fitantanana orinasa.…