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, cache
yardımcı, get
cephedeki 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
Facade
Taban 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()
get
Cache
<?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 Cache
cepheyi "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\Cache
get
class Cache extends Facade
{
/**
* Get the registered name of the component.
*
* @return string
*/
protected static function getFacadeAccessor() { return 'cache'; }
}
Bunun yerine, Cache
cephe temel Facade
sı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()
Cache
cache
get
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.
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...
Emin olun Google Çeviri daha iyi çalışıyor :(
Bu nedir Allah aşkına ya. Google çeviriyi koymak büyük bir saygısızlık bence kaldırın bu içeriği hiç olmazsa inanların boşa vaktını almamış olursunuz.