په بل عبارت، د خدماتو چمتو کونکي د یو فینل په څیر دي چې د هغې له لارې موږ د لاراول په نوم د انجن "خدمت کانټینر" په نوم ټانک ته "طبقه" تیل اچوو.
که موږ 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
ایا دوی بار شوي دي؟
دوی هغه دي definites په صف کې 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
, etc. په بل عبارت، د خدماتو چمتو کونکي یوازې ټولګي دي چې ځینې نړیوال فعالیت ثبت کړي.
دوی د "وړاندې کونکو" په توګه جلا دي ځکه چې دوی د غوښتنلیک د ژوند دورې کې خورا دمخه پرمخ ځي ، نو یو څه نړیوال دلته مناسب دي مخکې لدې چې اجرا کونکي سکریپټ ماډلونو یا کنټرولرانو ته ورسیږي.
ډیری فعالیت د 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()
{
//
}
}
لکه څنګه چې موږ دننه لیدلی شو دوه میتودونه شتون لري:
د راجستر () میتود موږ ته اجازه راکوي defiزموږ د خدماتو کانټینر ته نیش لینکونه. د مثال په توګه، په لاندې کوډ کې:
public function register()
{
$this->app->singleton(my_class, function($app){
return new MyClass($app);
});
}
$this->app په لاراویل کې یو نړیوال متغیر دی چې یو واحد ټولګی د ایپ له لارې لاسرسی کولی شي.
Singleton یوه ځانګړتیا ده. کله چې د دې خصوصیت پلي کول، موږ غوښتنلیک ته خبر ورکوو چې هر هغه ټولګي چې په اپلیکیشن کې د پیرامیټر په توګه تیریږي باید په ټول غوښتنلیک کې یوازې یو مثال ولري. دا پدې مانا ده چې 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
تاسو ممکن په دې کې هم علاقه ولرئ:
د Veeam لخوا Coveware به د سایبر غصب پیښو غبرګون خدماتو چمتو کولو ته دوام ورکړي. Coveware به د عدلي او درملنې وړتیاوې وړاندې کړي ...
د وړاندوینې ساتنه د تیلو او ګاز سکتور کې انقلاب رامینځته کوي ، د نبات مدیریت لپاره د نوښت او فعال چلند سره.
د انګلستان CMA د مصنوعي استخباراتو په بازار کې د لوی ټیک چلند په اړه خبرداری خپور کړی. هلته…
د "شنو خونو" فرمان، چې د اروپایي اتحادیې لخوا د ودانیو د انرژۍ موثریت لوړولو لپاره جوړ شوی، خپل مقننه پروسه پای ته رسولې ده ...