Service Provider در لاراول
هر برنامهای (حتی غیر لاراولی) برای اینکه اجرا بشه باید چندین کلاس و فایل رو لود و اجرا کنه. سرویسهایی مثل کش، سشن، کوکی، دیتابیس و … از قبل باید لود بشن تا برنامهی ما کار اصلیش رو انجام بده. این لود شدنها توسط قسمت Service Provider ها انجام میشه. این قسمت مسئول پیکربندی و آمادهسازی پروژه هست.
لاراول پرووایدر (Provider) های ما رو از کجا فراخوانی میکنه؟ فایل app.php توی پوشه config رو ببینید؛ یک آرایهای وجود داره به اسم providers:
‘providers’ => [
/*
* Laravel Framework Service Providers…
*/
Illuminate\Auth\AuthServiceProvider::class,
Illuminate\Cache\CacheServiceProvider::class,
Illuminate\Cookie\CookieServiceProvider::class,
Illuminate\Database\DatabaseServiceProvider::class,
// …
خب همونطور که میبینیم پرووایدرهایی مثل Auth, Cache, Cookie و Database اینجا ثبت شدن! لاراول اول اینها رو لود میکنه و بعد برنامهی اصلی ما که وابسته به این سرویسها هست پردازش میشه. یک پرووایدر مثل Auth رو اگه باز کنین میبینیم که تنظیمات مربوط احراز هویت اونجا ثبت شده. برای کش و کوکی هم همینطور.
ساختن یک پرووایدر شخصی
برای ساختن یک پرووایدر شخصی از دستور آرتیزان زیر استفاده میکنیم:
php artisan make:provider LoggerServiceProvider
با اجرای این دستور یک فایل به اسم LoggerServiceProvider.php توی مسیر app/Providers برای ما ساخته میشه با محتویات زیر:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class LoggerServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
//
}
}
متد register مخصوص bind کردن چیزها توی Service Container هست. حالا چیزایی که توی AppServiceProvider نوشتیم رو انتقال میدیم به این متد:
class LoggerServiceProvider extends ServiceProvider
{
public function register()
{
$logger = new Logger;
$logger->setDriver(‘file’);
$logger->setRate(30);
$this->app->instance(‘Logger’, $logger);
}
// …
}
تنها کاری که باید انجام بدیم شناسایی کردن این پرووایدر به فریمورک هست. فایل config/app.php رو باز و این پرووایدر رو به آرایه providers اضافه میکنیم:
<?php
// …
‘providers’ => [
// …
\App\Providers\LoggerServiceProvider::class,
]
الان این پرووایدر و همهی تنظیمات مربوط به اون توی برنامه در دسترس هست.