Giriş
Servis sağlayıcılar (Service Providers) Laravel uygulamasının başlatılmasının merkezidir. Sizin uygulamanız ve hem de tüm Laravel’in çekirdeği servis sağlayıcılar tarafından başlatılır.
Fakat, “başlatma” derken neyi kasdediyoruz. Genelde kasdettiğimiz şeyler; taşıyıcıya bağlama, olay dinleyiciler, hatta yönlendiricilerdir. Servis sağlayıcılar uygulamanızı yapılandırmalarınızn merkezidir.
Laravel’le gelen config/app.php
dosyasını açarsanız providers
isimli bir dizi göreceksiniz. Uygulamanız için yüklenecek servis sağlayıcıların hepsi burada yer alır. tabiki, bunlardan çoğu sonradan yüklemeli sağlayıcılardır, yani her istekte yüklenmezler ancak ihtiyaç duyulduğunda yüklenirler.
Bu genel bakıştan sonra Laravel uygulamasına kendi servis sağlayıcılarınızı yazmayı ve kaydetmeyi öğreneceksiniz.
Servis Sağlayıcıları Yazmak
Tüm servis sağlayıcıları Illuminate\Support\ServiceProvider
sınıfından genişletilir. Bu sanal sınıf servis sağlayıcınızda en az bir metod tanımlamanızı gerektirir: register
. register
metodu yalnızca servis taşıyıcısına bağlantılar için kullanın. Hiç bir zaman herhangi bir olay dinleyici, yönlendirici veya herhangi bir işlem kaydetmeyi denemeyin.
Artisan CLI make:provider
komuturla kolayca yeni bir sağlayıcı oluşturabilir.
1 |
php artisan make:provider RiakServiceProvider |
Kayıt Metodu
Daha önceden değinildiği gibi register
metodu içinde yalnızca servis taşıcısına bağlantıyı yapın. Hiç bir zaman Herhangi bir olay dinleyici, yönlendirici veya herhangi bir işlem kaydetmeyi denemeyin. Diğer türlü yanlışlıkla servis sağlayıcı tarafından henüz yüklenmemiş bir servisi kullanabilirsiniz.
Şimdi, temel bir servis sağlayıcıya göz atalım:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
namespace App\Providers; use Riak\Connection; use Illuminate\Support\ServiceProvider; class RiakServiceProvider extends ServiceProvider { /** * Register bindings in the container. * * @return void */ public function register() { $this->app->singleton('Riak\Contracts\Connection', function ($app) { return new Connection(config('riak')); }); } } |
Bu servis sağlayıcısında yalnızca register
metodu tanımlı.
Hazırlama (Boot) Metodu
Servis sağlayıcımızda bir görünüm kopozitörünü kaydetmek için neye ihtiyacımız var? boot
metoduyla bu yapılabilir. Bu metod kaydedilen tüm diğer servis sağlayıcılar kaydedildikten sonra çağrılır, bunun anlamı framework tarafından kaydedilen diğer tüm servislere erişiminiz olduğudur:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
namespace App\Providers; use Illuminate\Support\ServiceProvider; class EventServiceProvider extends ServiceProvider { /** * Perform post-registration booting of services. * * @return void */ public function boot() { view()->composer('view', function () { // }); } /** * Register bindings in the container. * * @return void */ public function register() { // } } |
Servis Sağlayıcının Kaydı
Tüm servis sağlayıcılar config/app.php
yapılandırma dosyasında kaydedilir. Bu dosya servis sağlayıclarınızının isimlerini listeleyebileceğiniz providers
dizisi içerir. Varsayılan olarak Laravel’in temel vervis sağlayıcıları bu dizidedir. Bu servis sağlayıcıları mail, kuyruk (queue), ön bellek (cache) gibi temel laravel bileşenlerini hazırlar.
Servis sağlayıcınızı kaydetmek için bu diziye ekleme yapın:
1 2 3 4 5 |
'providers' => [ // Other Service Providers 'App\Providers\AppServiceProvider', ], |
Gecikmeli Yüklenen (Deffered) Sağlayıcılar
Sağlayıcınız sadece servis taşıyıcısına kaydetmek içinse, ihtiyaç duyulduğunda yüklenen gecikmeli yüklemeyi kullanabilirsiniz. Gecikmeli yükleme, her istekte dosya sisteminden yüklelenmeyeceği için uygulamanızın performansını arttır.
Bir sağlayıcının gecikmeli yüklemenmesi için defer
parametresini true
ayarlayın ve provides
isimli bir metod tanımlayın. provides
metodu kaydedilen sağlayıcının servis taşıyıcı bağlantısını döner.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
namespace App\Providers; use Riak\Connection; use Illuminate\Support\ServiceProvider; class RiakServiceProvider extends ServiceProvider { /** * Indicates if loading of the provider is deferred. * * @var bool */ protected $defer = true; /** * Register the service provider. * * @return void */ public function register() { $this->app->singleton('Riak\Contracts\Connection', function ($app) { return new Connection($app['config']['riak']); }); } /** * Get the services provided by the provider. * * @return array */ public function provides() { return ['Riak\Contracts\Connection']; } } |
Laravel gecikmeli yüklenen sağlayıcılar tarafından yüklenen tüm servislerin listesini saklar ve derler. Daha sonra bu servislerin çözümlenmesini denediğinizde Laravel servis sağlayıcıyı yükler.