మరో మాటలో చెప్పాలంటే, సర్వీస్ ప్రొవైడర్లు లారావెల్ అనే ఇంజిన్ యొక్క "సర్వీస్ కంటైనర్" అనే ట్యాంక్లో "క్లాస్" ఇంధనాన్ని పోసే గరాటు లాంటివి.
మేము config/app.phpని తెరిస్తే, “ప్రొవైడర్” పేరుతో ఒక శ్రేణిని చూస్తాము.
'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,
.
.
.
],
ఇవి లారావెల్తో కలిపి అందించబడిన కొన్ని సర్వీస్ ప్రొవైడర్లు, అనగా సర్వీస్ కంటైనర్లో ఉంచబడిన ప్రాథమిక సేవలు.
service provider
అవి ప్రదర్శించబడ్డాయా?మేము డాక్యుమెంటేషన్ చూస్తే అభ్యర్థనపై జీవితచక్రం , కింది ఫైల్లు ప్రారంభంలో అమలు చేయబడతాయి:
public/index.php
bootstrap/app.php
app/Http/Kernel.php
మరియు అతని Middlewares
Service Providers
: ఈ వ్యాసం యొక్క కంటెంట్నాణ్యత service provider
అవి లోడ్ అయ్యాయా?
వారే defiశ్రేణిలో నైట్స్ 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,
],
];
మేము చూడగలిగినట్లుగా, జాబితా ఉంది service provider
ఫోల్డర్లో పబ్లిక్ కాదు /vendor
, మనం వాటిని తాకకూడదు లేదా సవరించకూడదు. మాకు ఆసక్తి ఉన్నవి క్రింద ఉన్నాయి BroadcastServicerProvider
డిఫాల్ట్గా నిలిపివేయబడింది, బహుశా ఇది చాలా అరుదుగా ఉపయోగించబడుతుంది.
ఈ సర్వీస్ ప్రొవైడర్లందరూ జాబితాను పునరావృతం చేస్తూ పై నుండి క్రిందికి నడుస్తారు రెండుసార్లు:
register()
, పద్ధతికి ముందు కాన్ఫిగర్ చేసిన దాన్ని (చివరికి) అమలు చేయడానికి ఉపయోగపడుతుంది boot()
.boot()
అందరు ప్రొవైడర్లలో. మళ్ళీ, శ్రేణి యొక్క పై నుండి క్రిందికి ఒక్కొక్కటిగా 'providers'
.I Service Providers
లారావెల్లో చేర్చబడ్డాయి, ఫోల్డర్లో ఉన్నవన్నీ ఉన్నాయి app/Providers
:
AppServiceProvider
AuthServiceProvider
BroadcastServiceProvider
EventServiceProvider
RouteServiceProvider
అవన్నీ PHP తరగతులు, ఒక్కొక్కటి దాని స్వంత అంశానికి సంబంధించినవి: App
, Auth
, Broadcasting
, Events
e Routes
. కానీ వారందరికీ ఉమ్మడిగా ఒక విషయం ఉంది: పద్ధతి boot()
.
ఆ పద్ధతిలో, మేము ఆ విభాగాలలో దేనికైనా సంబంధించిన ఏదైనా కోడ్ని వ్రాయవచ్చు: auth
, events
, route
, మొదలైనవి మరో మాటలో చెప్పాలంటే, సర్వీస్ ప్రొవైడర్లు కొన్ని గ్లోబల్ ఫంక్షనాలిటీని నమోదు చేయడానికి తరగతులు మాత్రమే.
అవి "ప్రొవైడర్లు"గా వేరుగా ఉంటాయి, ఎందుకంటే అవి అప్లికేషన్ లైఫ్సైకిల్లో చాలా ముందుగానే అమలవుతాయి, కాబట్టి అమలు చేసే స్క్రిప్ట్ మోడల్లు లేదా కంట్రోలర్లకు అందే ముందు ఏదో ఒక గ్లోబల్ ఇక్కడ సౌకర్యవంతంగా ఉంటుంది.
చాలా వరకు కార్యాచరణ RouteServiceProviderలో ఉంది, ఇక్కడ కోడ్ ఉంది:
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());
});
}
}
ఫైల్లు కాన్ఫిగర్ చేయబడిన తరగతి ఇది route
తో routes/web.php
e routes/api.php
డిఫాల్ట్గా చేర్చబడిందిdefiనీత. API కోసం వివిధ కాన్ఫిగరేషన్లు కూడా ఉన్నాయని గమనించండి: ఎండ్పాయింట్ ఉపసర్గ /api
మరియు మిడిల్వేర్ api
అందరి కోసం routes
.
మేము సవరించవచ్చు service providers
, ఫోల్డర్లో లేనివి /vendor
. మీరు అనేక మార్గాలను కలిగి ఉన్నప్పుడు మరియు వాటిని నిర్దిష్ట ఫైల్లుగా విభజించాలనుకున్నప్పుడు ఈ ఫైల్లను అనుకూలీకరించడం జరుగుతుంది. మీరు సృష్టించుకోండి routes/auth.php
మరియు అక్కడ పాత్లను ఉంచండి, ఆపై మీరు ఆ ఫైల్ను పద్ధతిలో "ఎనేబుల్" చేయండి boot()
di RouteServiceProvider
, కేవలం మూడవ వాక్యాన్ని జోడించండి:
`Route::middleware('web') // or maybe you want another middleware?
->group(base_path('routes/auth.php'));
AppServiceProvider
అది ఖాళీగా ఉంది. కోడ్ జోడించడానికి ఒక సాధారణ ఉదాహరణ AppServiceProvider
, ఎలోక్వెంట్లో సోమరితనం లోడింగ్ను నిలిపివేయడం గురించి. ఇది చేయటానికి, మీరు కేవలం అవసరం రెండు పంక్తులు జోడించండి పద్ధతిలో boot()
:
// app/Providers/AppServiceProvider.php
use Illuminate\Database\Eloquent\Model;
public function boot()
{
Model::preventLazyLoading(! $this->app->isProduction());
}
రిలేషన్ షిప్ మోడల్ లోడ్ కాకపోతే ఇది మినహాయింపును అందిస్తుంది.
service provider
అనుకూలీకరించినప్రీ ఫైల్స్తో పాటుdefinites, మేము సులభంగా ఒక కొత్త సృష్టించవచ్చు Service Provider
, ముందు కాకుండా ఇతర అంశాలకు సంబంధించినవిdefiగా ముగించారు auth
/event
/routes
.
వీక్షణ కాన్ఫిగరేషన్ చాలా సాధారణ ఉదాహరణ Blade
. మేము ఆదేశాన్ని సృష్టించగలము Blade
, ఆపై ఆ కోడ్ని పద్ధతిలో జోడించండి boot(
) ఏదైనా service provider
, డిఫాల్ట్తో సహా AppServiceProvider
. ఇప్పుడు ఒక సృష్టిద్దాం ViewServiceProvider
వేరు.
మేము ఈ ఆదేశంతో దీన్ని రూపొందించవచ్చు:
php artisan make:provider ViewServiceProvider
ఇది ఇంతకు ముందు తరగతిని ఉత్పత్తి చేస్తుందిdefiరాత్రి:
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()
{
//
}
}
మేము లోపల చూడగలిగినట్లుగా రెండు పద్ధతులు ఉన్నాయి:
నమోదు () పద్ధతి మాకు అనుమతిస్తుంది defiమా సేవా కంటైనర్కు నిష్ లింక్లు. ఉదాహరణకు, కింది కోడ్లో:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->యాప్ అనేది లారావెల్లోని గ్లోబల్ వేరియబుల్, దీనిని సింగిల్టన్ క్లాస్ యాప్ ద్వారా యాక్సెస్ చేయవచ్చు.
సింగిల్టన్ ఒక లక్షణం. ఈ ఫీచర్ని వర్తింపజేస్తున్నప్పుడు, యాప్లో ఏ తరగతి పారామీటర్గా ఉత్తీర్ణత పొందుతుందో అది మొత్తం అప్లికేషన్లో ఒక ఉదాహరణ మాత్రమే కలిగి ఉండాలని మేము అప్లికేషన్కి తెలియజేస్తున్నాము. దీనర్థం MyClass ఒకసారి పరిష్కరించబడుతుంది మరియు my_class వేరియబుల్ని ఉపయోగించి యాక్సెస్ చేయగల ఒక ఉదాహరణ మాత్రమే ఉంటుంది.
బూట్() పద్ధతి రిజిస్టర్ పద్ధతిని ఉపయోగించి గతంలో నమోదు చేయబడిన అన్ని సేవలను యాక్సెస్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది. మీరు ఈ పద్ధతిని ఉపయోగించి మీ అప్లికేషన్లో మొత్తం సేవను చేర్చవచ్చు.
మునుపటి ఉదాహరణకి తిరిగి వెళితే, పద్ధతిని తీసివేద్దాం register()
మరియు లోపల boot()
బ్లేడ్ డైరెక్టివ్ కోడ్ను జోడించండి:
use Illuminate\Support\Facades\Blade;
public function boot()
{
Blade::directive('datetime', function ($expression) {
return "<?php echo ($expression)->format('m/d/Y H:i'); ?>";
});
}
మరొక ఉదాహరణ ViewServiceProvider
సంబంధించి View Composers
, ఇక్కడ స్నిప్పెట్ ఉంది అధికారిక లారావెల్ సైట్ నుండి :
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) {
//
});
}
}
అమలు చేయడానికి, ఈ కొత్త ప్రొవైడర్ తప్పనిసరిగా ఇన్ ప్రొవైడర్ శ్రేణికి జోడించబడాలి/నమోదు చేయబడాలి 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
మీరు వీటిపై కూడా ఆసక్తి కలిగి ఉండవచ్చు:
ఆపిల్ విజన్ ప్రో కమర్షియల్ వ్యూయర్ని ఉపయోగించి ఆప్తాల్మోప్లాస్టీ ఆపరేషన్ కాటానియా పాలిక్లినిక్లో నిర్వహించబడింది…
కలరింగ్ ద్వారా చక్కటి మోటారు నైపుణ్యాలను పెంపొందించుకోవడం, రాయడం వంటి క్లిష్టమైన నైపుణ్యాల కోసం పిల్లలను సిద్ధం చేస్తుంది. రంగు వేయడానికి…
నావికా రంగం నిజమైన ప్రపంచ ఆర్థిక శక్తి, ఇది 150 బిలియన్ల మార్కెట్ వైపు నావిగేట్ చేసింది...
గత సోమవారం, ఫైనాన్షియల్ టైమ్స్ OpenAIతో ఒప్పందాన్ని ప్రకటించింది. FT దాని ప్రపంచ స్థాయి జర్నలిజానికి లైసెన్స్ ఇస్తుంది…