Laravel cepheleri, servis konteynerindeki altta yatan sınıflara "statik proxy'ler" olarak hizmet eder ve geleneksel statik yöntemlerden daha fazla test edilebilirlik ve esneklik sağlarken özlü, ifade edici bir sözdiziminin avantajını sağlar. Cephelerin nasıl çalıştığını tam olarak anlamasanız bile sorun değil.

Laravel'in tüm cepheleri IlluminateSupportFacades ad alanında tanımlanmıştır. Bu yüzden, bir cepheye şu şekilde kolayca erişebiliriz:

use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Route;

Route::get('/cache', function () {
    return Cache::get('key');
});
Anlatımı boyunca, örneklerin çoğu, çerçevenin çeşitli özelliklerini göstermek için cepheleri kullanacaktır.

Yardımcı Fonksiyonlar

Laravel, cepheleri tamamlamak için, genel Laravel özellikleriyle etkileşimi daha da kolaylaştıran çeşitli genel "yardımcı işlevler" sunar. Etkileşimde bulunabileceğiniz genel yardımcı işlevlerden bazıları view, response, url, config ve daha fazlasıdır. Laravel tarafından sunulan her yardımcı işlev, karşılık gelen özelliğiyle belgelenmiştir; ancak, özel yardımcı belgelerde eksiksiz bir liste mevcuttur.

Örneğin, bir JSON yanıtı oluşturmak için IlluminateSupportFacadesResponse cephesi'ini kullanmak yerine, basitçe yanıt işlevini kullanabiliriz. Yardımcı işlevler küresel olarak kullanılabilir olduğundan, bunları kullanmak için herhangi bir sınıfı içe aktarmanız gerekmez:

use Illuminate\Support\Facades\Response;

Route::get('/users', function () {
    return Response::json([
        // ...
    ]);
});

Route::get('/users', function () {
    return response()->json([
        // ...
    ]);
});
Cepheler Ne Zaman Kullanılmalıdır?

Cephelerin birçok faydası vardır. Laravel'in özelliklerini, elle enjekte edilmesi veya yapılandırılması gereken uzun sınıf adlarını hatırlamadan kullanmanıza olanak tanıyan özlü, akılda kalıcı bir söz dizimi sağlarlar. Dahası, PHP'nin dinamik yöntemlerini benzersiz bir şekilde kullanmaları nedeniyle test edilmeleri kolaydır.

Ancak, cepheleri kullanırken bazı dikkatler gösterilmelidir. Cephelerin birincil tehlikesi sınıf "kapsam kaymasıdır". Cepheler kullanımı çok kolay olduğundan ve enjeksiyon gerektirmediğinden, sınıflarınızın büyümeye devam etmesine ve tek bir sınıfta birçok cephe kullanmasına izin vermek kolay olabilir. Bağımlılık enjeksiyonu kullanılarak, bu potansiyel, büyük bir oluşturucunun sınıfınızın çok büyüdüğüne dair size verdiği görsel geri bildirimle azaltılır. Bu nedenle, cepheleri kullanırken, sorumluluk kapsamının dar kalması için sınıfınızın boyutuna özellikle dikkat edin. Sınıfınız çok büyüyorsa, onu birden fazla küçük sınıfa bölmeyi düşünün.

Cepheler ve Bağımlılık Enjeksiyonu

Bağımlılık enjeksiyonunun birincil faydalarından biri, enjekte edilen sınıfın uygulamalarını takas etme yeteneğidir. Bu, bir mock veya stub enjekte edip stub üzerinde çeşitli yöntemlerin çağrıldığını iddia edebileceğiniz için test sırasında faydalıdır.

Tipik olarak, gerçekten statik bir sınıf yöntemini taklit etmek veya saplamak mümkün olmazdı. Ancak, cepheler, hizmet konteynerinden çözümlenen nesnelere yöntem çağrılarını vekil etmek için dinamik yöntemler kullandığından, aslında cepheleri, enjekte edilmiş bir sınıf örneğini test edeceğimiz gibi test edebiliriz. Örneğin, aşağıdaki rota verildiğinde:

use Illuminate\Support\Facades\Cache;

Route::get('/cache', function () {
    return Cache::get('key');
});
Laravel'in cephe test yöntemlerini kullanarak, Cache::get yönteminin beklediğimiz argümanla çağrıldığını doğrulamak için aşağıdaki testi yazabiliriz:

use Illuminate\Support\Facades\Cache;

test('basic example', function () {
    Cache::shouldReceive('get')
        ->with('key')
        ->andReturn('value');

    $response = $this->get('/cache');

    $response->assertSee('value');
});