Facades - LARAVEL

Facades - LARAVEL

Facades

 

Giriş

Cepheler, uygulamanın servis kabında bulunan sınıflara "statik" bir arayüz sağlar . Laravel, Laravel'in hemen hemen tüm özelliklerine erişim sağlayan birçok cepheye sahip. Laravel cepheler, geleneksel statik yöntemlere kıyasla daha fazla test edilebilirlik ve esneklik sağlamaya devam ederken, servis konteynırındaki altta yatan sınıflara "statik yakınlıklar" olarak hizmet ederek, anlamlı, etkili bir söz diziminin faydasını sağlar.

Laravel'in cephelerinin tamamı ad alanında tanımlanmıştır. Dolayısıyla böyle bir cepheye kolayca erişebiliriz:Illuminate\Support\Facades

use Illuminate\Support\Facades\Cache;

Route::get('/cache', function () {
    return Cache::get('key');
});

Laravel belgeleri boyunca, örneklerin çoğunda cepheler çerçevenin çeşitli özelliklerini göstermek için kullanılacaktır.

 

Facades Kullanırken Ne Zaman

Cephelerin birçok yararı var. Elle püskürtülmesi veya konfigüre edilmesi gereken uzun sınıf isimleri hatırlamadan Laravel'in özelliklerini kullanmanızı sağlayan kısa, unutulmaz bir sözdizimi sağlarlar. Dahası, PHP'nin dinamik yöntemlerini benzersiz şekilde kullandıkları için test etmeleri kolay.

Ancak, cephe kullanırken bazı dikkat gösterilmelidir. Cephelerin birincil tehlikesi sınıf kapsamı sürünme özelliğidir. Cephelerin kullanımı çok kolaydır ve enjeksiyon gerektirmez, sınıflarınızın büyümesine ve tek bir sınıfta birçok cephe kullanmaya devam etmesi kolay olabilir. Bağımlılık enjeksiyonunu kullanarak bu potansiyel görsel geribildirimle azaltılır; büyük bir kurucu size sınıfınızın çok büyük olmasını sağlar. Bu nedenle, cephe kullanırken sınıfının boyutuna özel dikkat edin, böylece sorumluluk kapsamı dar kalır.

 

Laravel ile etkileşime giren bir üçüncü taraf paketi oluştururken, cepheleri kullanmak yerine Laravel sözleşmeleri enjekte etmek daha iyi . Paketler Laravel'in dışında inşa edildiğinden Laravel'in cephe test yardımcılarına erişemezsiniz.

 

Facades vs. Bağımlılık Enjeksiyonu

Bağımlılık enjeksiyonunun birincil yararlarından biri, enjekte edilen sınıfın uygulamalarını takas etme yeteneğidir. Bir taklit veya saplama enjekte edebilir ve saplama üzerinde çeşitli yöntemlerin çağrıldığını iddia ettiğinden, bu test sırasında yararlıdır.

Tipik olarak, gerçekten statik bir sınıf yöntemini algılamak veya saplamak mümkün olmayacaktır. Bununla birlikte, cepheler servis konteynerinden çözümlenen nesnelere metod çağrısı yapmak için dinamik metotlar kullandığından, aslen enjeksiyonlu sınıf örneğini test ettiğimiz gibi cepheleri test edebiliriz. Örneğin, aşağıdaki yol göz önüne alındığında:

use Illuminate\Support\Facades\Cache;

Route::get('/cache', function () {
    return Cache::get('key');
});

Yöntemin, beklediğimiz argümanla çağrıldığını doğrulamak için aşağıdaki testi yazabiliriz :Cache::get

use Illuminate\Support\Facades\Cache;

/**
 * A basic functional test example.
 *
 * @return void
 */
public function testBasicExample()
{
    Cache::shouldReceive('get')
         ->with('key')
         ->andReturn('value');

    $this->visit('/cache')
         ->see('value');
}

 

Facades vs. Yardımcı Fonksiyonlar

Cephelere ek olarak, Laravel, görünüm üretme, olayları tetikleme, iş gönderme veya HTTP yanıtları gönderme gibi ortak görevleri gerçekleştirebilen çeşitli "yardımcı" işlevler içeriyor. Bu yardımcı işlevlerin birçoğu karşılık gelen bir cephe ile aynı işlevi görür. Örneğin, bu cephe çağrısı ve yardımcı çağrı eşdeğerdir:

return View::make('profile');

return view('profile');

Cepheler ve yardımcı fonksiyonlar arasında kesinlikle pratik bir fark yoktur. Yardımcı fonksiyonları kullanırken, bunları tam olarak ilgili cephede yaptığınız gibi test edebilirsiniz. Örneğin, aşağıdaki yol göz önüne alındığında:

Route::get('/cache', function () {
    return cache('key');
});

Kaputun altında, cacheyardımcı, getcephedeki sınıfın yöntemini çağıracağına Cache. Böylece, yardımcı işlevini kullanıyor olsak bile, yöntemin beklenen argümanla çağrıldığını doğrulamak için aşağıdaki sınamayı yazabiliriz:

use Illuminate\Support\Facades\Cache;

/**
 * A basic functional test example.
 *
 * @return void
 */
public function testBasicExample()
{
    Cache::shouldReceive('get')
         ->with('key')
         ->andReturn('value');

    $this->visit('/cache')
         ->see('value');
}

 

Facades Nasıl Çalışır

Bir Laravel uygulamasında, cephe konteynerden bir nesneye erişim sağlayan bir sınıftır. Bu işi yapan makine sınıfındadır Facade. Laravel'in cepheleri ve oluşturduğunuz herhangi bir özel cepheler temel sınıfa genişler .Illuminate\Support\Facades\Facade

FacadeTaban sınıfı kullanır kaptan çözülmesi bir nesneye senin cephesi çağrı erteleme sihirli-yöntemde. Aşağıdaki örnekte Laravel önbellek sistemine çağrı yapılır. Bu koda bakarak , sınıfın statik yönteminin çağrıldığını varsayabilir :__callStatic()getCache

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;

class UserController extends Controller
{
    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function showProfile($id)
    {
        $user = Cache::get('user:'.$id);

        return view('profile', ['user' => $user]);
    }
}

Dosyanın üst kısmının yakınında Cachecepheyi "içe aktarıyoruz" . Bu cephe, arabirimin temelini oluşturan uygulamasına erişmek için bir vekil görevi görür . Cepheyi kullanarak yaptığımız tüm çağrılar Laravel'in önbellek hizmetinin temel örneğine geçirilecek.Illuminate\Contracts\Cache\Factory

Bu sınıfa bakarsak, statik bir yöntem olmadığını görürsünüz :Illuminate\Support\Facades\Cacheget

class Cache extends Facade
{
    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'cache'; }
}

Bunun yerine, Cachecephe temel Facadesınıfı genişletir ve yöntemi tanımlar . Bu yöntemin görevi, hizmet konteyneri bağlamanın adını döndürmektir. Bir kullanıcı cephe üzerindeki herhangi bir statik yöntemi referans gösterdiğinde Laravel , hizmet kabından bağlamayı düzeltir ve istenen yöntemi (bu durumda ) bu nesneye karşı çalıştırır .getFacadeAccessor()Cachecacheget

 

Cephe Sınıfı Referansı

Aşağıda, her cepheyi ve onun altında yatan sınıfı bulacaksınız. Bu, belirli bir cephe kökü için hızlı bir şekilde API belgelerine girmek için kullanışlı bir araçtır. Servis kabı bağlama anahtarı da uygunsa dahildir.

1 Yorum Yapıldı

  1. Mustafa 2017-12-19 17:24:28

    Hocam laravel dokümantasyonu Türkçeleştirmişsiniz, emeğinize sağlık. Farklı görüşler olacaktır, ama ben konunun iyi anlaşılması açısından her şeyin Türkçe'ye çevrilmesine karşıyım. Terim isimleri ingilizce kalmalı. Türkçe çevirisinin anlaşılması çok zor oluyor. Türkçesini anlayacak kadar Türkçe öğrenende community'nin dilinden anlamıyor. Ben o yüzden terimlerin İngilizce kalması, can alıcı açıklamaların Türkçe olması taraftarıyım. Yapıcı bir eleştiri olarak değerlendirirseniz sevinirim. Emeğinize sağlık...

Yorum Yollayın