अर्को शब्दमा भन्नुपर्दा, सेवा प्रदायकहरू एउटा फनेल जस्तै हुन् जसको माध्यमबाट हामीले Laravel नामक इन्जिनको "सर्भिस कन्टेनर" भनिने ट्याङ्कीमा "वर्ग" इन्धन हाल्छौं।
यदि हामीले 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
के तिनीहरू लोड छन्?
तिनीहरू ती हुन् defiarray मा 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()
सबै प्रदायकहरूको। फेरि, एक एक गरेर, माथि देखि तल, array को '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
अनुकूलितपूर्व फाइलहरु को अतिरिक्त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हाम्रो सेवा कन्टेनरमा nish लिङ्कहरू। उदाहरण को लागी, निम्न कोड मा:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app laravel मा एक वैश्विक चर हो जुन एक सिंगलटन वर्गले एप मार्फत पहुँच गर्न सक्छ।
सिंगलटन एक विशेषता हो। यो सुविधा लागू गर्दा, हामी एपमा मापदण्डको रूपमा जुनसुकै कक्षा उत्तीर्ण गरिएको छ त्यसको सम्पूर्ण अनुप्रयोगमा एउटा मात्र उदाहरण हुनुपर्छ भनेर अनुप्रयोगलाई सूचित गर्दैछौं। यसको मतलब MyClass एक पटक समाधान हुनेछ र केवल एक उदाहरण हुनेछ, जुन 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 ले फोरेन्सिक र उपचार क्षमताहरू प्रदान गर्दछ ...
अनुमानित मर्मतसम्भारले तेल र ग्यास क्षेत्रमा क्रान्तिकारी परिवर्तन गर्दैछ, बिरुवा व्यवस्थापनको लागि एक नवीन र सक्रिय दृष्टिकोणको साथ।…