ٻين لفظن ۾، سروس فراهم ڪندڙ هڪ فنل وانگر آهن، جنهن جي ذريعي اسان "ڪلاس" ايندھن کي ٽينڪ ۾ "سروس ڪنٽينر" سڏيو ويندو آهي جنهن کي 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
ڇا اهي ڀريل آهن؟
اهي اهي آهن 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 لاءِ پڻ مختلف تشڪيل آھن: Endpoint prefix /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
. اچو ته ھاڻي ٺاھيون a 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
توھان پڻ دلچسپي وٺندا آھيو:
ڪيٽينيا پولي ڪلينڪ ۾ ايپل ويزن پرو ڪمرشل ناظر استعمال ڪندي هڪ چشمي جو آپريشن ڪيو ويو…
رنگ سازي ذريعي سٺي موٽر صلاحيتن کي ترقي ڪرڻ ٻارن کي وڌيڪ پيچيده صلاحيتن لاء تيار ڪري ٿو جهڙوڪ لکڻ. رنگ ڏيڻ…
بحري شعبي هڪ حقيقي عالمي معاشي طاقت آهي، جيڪا 150 بلين مارڪيٽ جي طرف نيويگيٽ ڪئي آهي ...
گذريل سومر، فنانشل ٽائمز OpenAI سان هڪ ڊيل جو اعلان ڪيو. ايف ٽي پنهنجي عالمي سطح جي صحافت کي لائسنس ڏئي ٿو ...