दूसरे शब्दों में, सेवा प्रदाता एक फ़नल की तरह हैं जिसके माध्यम से हम लारवेल नामक इंजन के "सर्विस कंटेनर" नामक टैंक में "श्रेणी" ईंधन डालते हैं।
अगर हम कॉन्फ़िग/एप.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
: इस लेख की सामग्रीQuali 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
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
सभी के लिए 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
अनुकूलितपूर्व फ़ाइलों के अलावाdefiरात में, हम आसानी से एक नया बना सकते हैं 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->app laravel में एक वैश्विक चर है जिसे एक सिंगलटन वर्ग ऐप के माध्यम से एक्सेस कर सकता है।
सिंगलटन एक विशेषता है। इस सुविधा को लागू करते समय, हम एप्लिकेशन को सूचित कर रहे हैं कि जो भी वर्ग ऐप में एक पैरामीटर के रूप में पारित किया गया है, पूरे एप्लिकेशन में केवल एक उदाहरण होना चाहिए। इसका अर्थ है कि 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
, यहाँ अंश है आधिकारिक 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
इसमें आपकी भी रुचि हो सकती है:
रंग भरने के माध्यम से बढ़िया मोटर कौशल विकसित करना बच्चों को लेखन जैसे अधिक जटिल कौशल के लिए तैयार करता है। रंग भरना…
नौसैनिक क्षेत्र एक सच्ची वैश्विक आर्थिक शक्ति है, जो 150 अरब के बाज़ार की ओर बढ़ चुका है...
पिछले सोमवार को, फाइनेंशियल टाइम्स ने OpenAI के साथ एक समझौते की घोषणा की। एफटी अपनी विश्व स्तरीय पत्रकारिता को लाइसेंस देता है...
लाखों लोग स्ट्रीमिंग सेवाओं के लिए मासिक सदस्यता शुल्क का भुगतान करते हैं। यह आम राय है कि आप...