LARAVEL
Servis sağlayıcıları
Giriş
Servis sağlayıcılar, Laravel'in uygulama önyüklemesinin merkezi bir yeridir. Laravel'in temel hizmetlerinin yanı sıra kendi uygulamanızın da servis sağlayıcılar aracılığıyla önyüklemesi yapılır.
Ancak, "bootstrapped" ile ne demek istedik? Genel olarak, demek kayıt kayıt hizmeti konteyner bağlamaları, olay dinleyicileri, ara katman ve hatta yollarını gösteren şeyler. Servis sağlayıcılar, uygulamanızı yapılandırmak için merkezi bir yerdir.
Laravel ile birlikte verilen dosyayı açarsanız, bir dizi göreceksiniz . Bunların hepsi, uygulamanız için yüklenecek servis sağlayıcı sınıflarıdır. Tabii ki, bunların çoğu "ertelenmiş" sağlayıcılar, yani her isteği üzerine yüklenmeyecek, ancak yalnızca sağladıkları hizmetler gerçekten gerekli olduğunda.config/app.php
providers
Bu genel bakışta, kendi servis sağlayıcılarınızı nasıl yazacağınızı ve Laravel uygulamasına nasıl kayıt edeceğinizi öğreneceksiniz.
Yazı Hizmet Sağlayıcıları
Tüm servis sağlayıcılar sınıfı genişletir . Çoğu servis sağlayıcı bir ve bir yöntem içerir. Bu yöntemde, işleri yalnızca servis kabına bağlamanız gerekir . Herhangi bir olay dinleyicisini, rotasını veya herhangi başka bir işlevselliği yöntem içinde kaydetmeye çalışmayın .Illuminate\Support\ServiceProvider
register
boot
register
register
Artisan CLI, komutuyla yeni bir sağlayıcı oluşturabilir :make:provider
php artisan make:provider RiakServiceProvider
Kayıt Yöntemi
Daha önce de belirtildiği gibi, register
yöntem içinde yalnızca şeyler servis kabına bağlamanız gerekir . Herhangi bir olay dinleyicisini, rotasını veya herhangi başka bir işlevselliği register
yöntem içinde kaydetmeye çalışmayın . Aksi takdirde, yanlışlıkla henüz yüklenmemiş bir servis sağlayıcı tarafından sağlanan bir servisi kullanabilirsiniz.
Şimdi temel bir hizmet sağlayıcısına göz atalım. $app
Servis sağlayıcı yöntemlerinizden herhangi birinde, servis konteynerine erişmenizi sağlayan mülke her zaman erişirsiniz:
<?php
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(Connection::class, function ($app) {
return new Connection(config('riak'));
});
}
}
Bu servis register
sağlayıcı sadece bir yöntem tanımlar ve servis konteynerindeki bir uygulamayı tanımlamak için bu yöntemi kullanır . Eğer servis kabı nasıl çalıştığını anlamak yoksa, kontrol belgelerini .Riak\Connection
Önyükleme Yöntemi
Peki, servis sağlayıcımıza bir görüntü besteci kaydettirmeliyiz? Bu boot
yöntem içinde yapılmalıdır. Bu yöntem, diğer tüm servis sağlayıcıların kaydedilmesinden sonra çağrılır ; yani, çerçeve tarafından kaydedilen diğer tüm servislere erişiminiz vardır:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
view()->composer('view', function () {
//
});
}
}
Önyükleme Yöntemi Bağımlılığı Enjeksiyon
Servis sağlayıcınızın yöntemi için yazım ipucu bağımlılıkları yapabilirsiniz boot
. Servis kabı otomatik gereken herhangi bağımlılıkları enjekte edecektir:
use Illuminate\Contracts\Routing\ResponseFactory;
public function boot(ResponseFactory $response)
{
$response->macro('caps', function ($value) {
//
});
}
Sağlayıcıları Kaydetme
Tüm servis sağlayıcılar yapılandırma dosyasında kayıtlıdır. Bu dosya, servis sağlayıcılarınızın sınıf adlarını listeleyebileceğiniz bir dizi içerir . Varsayılan olarak, Laravel temel hizmet sağlayıcıları dizisi bu dizide listelenir. Bu sağlayıcılar, postacı, sıra, önbellek ve diğerleri gibi çekirdek Laravel bileşenlerini önyükleme yapar.config/app.php
providers
Sağlayıcınızı kaydetmek için, onu yalnızca diziye ekleyin:
'providers' => [
// Other Service Providers
App\Providers\ComposerServiceProvider::class,
],
Ertelenen Sağlayıcılar
Sağlayıcınız ise sadece içinde bağlamaları kayıt servis kabının , kayıtlı bağlardan biri aslında tabi dek kaydını ertelemeyi tercih edebilir. Böyle bir sağlayıcının yüklenmesini ertelemek uygulamanızın performansını artıracaktır, çünkü her istek üzerine dosya sisteminden yüklenmez.
Laravel, ertelenmiş servis sağlayıcıları tarafından sağlanan hizmetlerin bir listesini ve servis sağlayıcı sınıfının adını derler ve saklar. Ardından, yalnızca bu hizmetlerden birini çözmeye çalıştığınızda Laravel servis sağlayıcısını yükler.
Bir sağlayıcı yüklemesini ertelemek için, defer
özelliği ayarlayın true
ve bir provides
yöntem belirleyin. provides
Yöntem sağlayıcı tarafından tescil hizmet konteyner bağlamaları dönmelidir:
<?php
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(Connection::class, function ($app) {
return new Connection($app['config']['riak']);
});
}
/**
* Get the services provided by the provider.
*
* @return array
*/
public function provides()
{
return [Connection::class];
}
}
Henüz Yorum Yapılmamış, İlk Yorumu Siz Yapın