दुसऱ्या शब्दांत, सेवा प्रदाते हे फनेलसारखे असतात ज्याद्वारे आपण लारावेल नावाच्या इंजिनच्या "सर्व्हिस कंटेनर" नावाच्या टाकीमध्ये "वर्ग" इंधन ओततो.
आम्ही 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अॅरे मध्ये nites 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
Laravel मध्ये समाविष्ट, फोल्डरमध्ये उपस्थित असलेले सर्व आहेत 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
, Eloquent मध्ये आळशी लोडिंग अक्षम करण्याबद्दल आहे. हे करण्यासाठी, आपल्याला फक्त आवश्यक आहे दोन ओळी जोडा पद्धती मध्ये 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()
{
//
}
}
जसे आपण आत पाहू शकतो की दोन पद्धती आहेत:
register() पद्धत आम्हाला परवानगी देते defiआमच्या सेवा कंटेनरशी निश लिंक. उदाहरणार्थ, खालील कोडमध्ये:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->अॅप हे laravel मधील एक जागतिक चल आहे ज्यात सिंगलटन वर्ग अॅपद्वारे प्रवेश करू शकतो.
सिंगलटन हे एक वैशिष्ट्य आहे. हे वैशिष्ट्य लागू करताना, आम्ही अनुप्रयोगाला सूचित करत आहोत की अॅपमध्ये पॅरामीटर म्हणून कोणताही वर्ग उत्तीर्ण झाला असेल तर संपूर्ण अनुप्रयोगामध्ये फक्त एकच उदाहरण असावे. याचा अर्थ असा की मायक्लास एकदाच सोडवला जाईल आणि फक्त एकच उदाहरण असेल, ज्याला my_class व्हेरिएबल वापरून प्रवेश करता येईल.
boot() पद्धत तुम्हाला नोंदणी पद्धतीचा वापर करून पूर्वी नोंदणीकृत सर्व सेवांमध्ये प्रवेश करण्याची परवानगी देते. त्यानंतर तुम्ही ही पद्धत वापरून तुमच्या ऍप्लिकेशनमध्ये संपूर्ण सेवा समाविष्ट करू शकता.
मागील उदाहरणाकडे परत जाऊन, पद्धत काढून टाकू 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
, येथे स्निपेट आहे अधिकृत 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) {
//
});
}
}
चालवण्यासाठी, हा नवीन प्रदाता जोडण्याची/नोंदणी प्रदाता अॅरेमध्ये असणे आवश्यक आहे 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
तुम्हाला यामध्ये देखील स्वारस्य असू शकते:
गेल्या सोमवारी, फायनान्शिअल टाईम्सने OpenAI सह करार जाहीर केला. FT ने त्याच्या जागतिक दर्जाच्या पत्रकारितेचा परवाना…
लाखो लोक स्ट्रीमिंग सेवांसाठी पैसे देतात, मासिक सदस्यता शुल्क भरतात. असे सामान्य मत आहे की आपण…
Veeam द्वारे Coveware सायबर खंडणी घटना प्रतिसाद सेवा प्रदान करणे सुरू ठेवेल. Coveware फॉरेन्सिक आणि उपाय क्षमता प्रदान करेल…
वनस्पती व्यवस्थापनासाठी नाविन्यपूर्ण आणि सक्रिय दृष्टीकोनसह, भविष्यसूचक देखभाल तेल आणि वायू क्षेत्रात क्रांती घडवत आहे.…