LARAVEL

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.phpproviders

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\ServiceProviderregisterbootregisterregister

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, registeryö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 registeryö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. $appServis 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 registersağ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 bootyö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 bootServis 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.phpproviders

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 trueve bir providesyöntem belirleyin. providesYö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

Yorum Yollayın