Giriş yapmadınız.

#1 24.04.2019 11:23:18

dodiş
Üye
Yer: Mersin
Kayıtlı: 30.10.2017
Mesajlar: 46

Laravel Facades

İyi kodlamalar,

Türkçe ve ingilizce (ne kadar az anlasamda) kaynaklardan araştırdım. Facades (Cepheler) ile ilgili kullanımı henüz net kazanmış gibi gözükmüyor nerede ne zaman kullanılır şekilde. Siz daha önce kullanma gereksinimi duydunuz mu ?
Bana göre Helpers gibi geliyor. Ve zaten Library altında Helpers.php kullandığım için o tarz bir şeye gerek duymadım. O zaman neden bu soruyu soruyorum.
Çünkü;
Bildirim özelliğini kullanacağım web sitemde. Bir görev atandığı zaman ve laravel 5.8 dökümantasyonunu incelediğim zaman da Using The Notification Facade başlığı gözüme takıldı.

php artisan make:notification InvoicePad

şekilde örnek için oluşturdum fakat tam kavrayamadım.
Burada türkçe veya ingilizce laravel de yapılmış bildirim gönderme örneği de varsa paylaşırsanız çok memnun olurum. roll

Çevrimdışı

#2 24.04.2019 11:37:56

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,623
Website

Yanıt: Laravel Facades

Şöyle, kalemliği temsil eden bir sınıfınız olsun:

class PencilCase {
    
    protected $items = ['kurşun kalem', 'tükenmez kalem', 'silgi'];
    
    public function getCount()
    {
        return count($this->items);    
    }
}

Ben şimdi kalemlikte kaç adet öge olduğunu öğrenmek istersem şöyle yaparım:

$pencilCase = new PencilCase;
$count = $pencilCase->getCount(); // 3

// ya da $count = (new PencilCase)->getCount();

Laravel'de ise bir çok yerde şöyle kullanım görebilirsiniz:

$count = PencilCase::getCount(); // Buradaki PencilCase ayrı bir sınıf, örneğin \App\Facades\PencilCase gibi, diğer ana sınıf ise \App\Services\PencilCase mesela

Gördüğünüz gibi statik olmayan bir yönteme statik olarak ulaştım. Bunu bu şekilde kullanmama yarayan ve proxy görevi gören \App\Facades\PencilCase sınıfı facade olmuş oluyor.

Kısa ve yetersiz bir açıklama yaptım çünkü bu konular tek başına anlatılması zor konular. Bu bir framework hep her şey birbiri ile bağlantılı.

Siz şimdilik temelleri öğrenmeye çalışın, dokümanları ve örnekleri inceleyin. Balıklama dalmayın yoksa en basit şeyi bile yapmakta zorluk çekersiniz.

Çevrimdışı

#3 24.04.2019 12:33:17

dodiş
Üye
Yer: Mersin
Kayıtlı: 30.10.2017
Mesajlar: 46

Yanıt: Laravel Facades

Tamamdır hocam çok teşekkürler siz olmasanız valla Türkçe cevap alacak yer yok smile

Çevrimdışı

#4 24.04.2019 12:50:43

deathisonitsway
Üye
Kayıtlı: 01.02.2016
Mesajlar: 445

Yanıt: Laravel Facades

İşin aslı laravelin facadesi facade değil.Bu ayrıntıyı bilin.Pattern olarak facade başka bir şeydir.Laravelin facadesi.Containere kaydedilmiş bir nesneye yalancı bir static çağırımla ulaşma yöntemine facade diyor.(Bu taylorun magic hastalığından kaynaklanan bir şey gibi duruyor bana göre smile ) Aslına bakarsan laravelin facadesi resmen proxydir.

Ornek vermek gerekirse ;

app()->instance('foo',new foo());

bu kod laravelin container sistemine foo adında bir abstract ifadeyi new foo() ile concrete bir obje atayarak saklar.

siz buna ;

app()['foo'];

diyerek ulasabilirsiniz...


Yazabileceğin bir facade sundan ibarettir...

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

}

aslında zırnık faydası yok sana...Annotations tanımlaman lazım ki foo nesnesinin methodlarını ide ipucu olarak hatırlatsın sana...


Mesela auth facadesi için tanımlanana annotationlara burada bakabilirsin...

https://github.com/laravel/framework/bl … s/Auth.php

Yani laravelin facadelerini tanımlı annotationlarla iyi kullanabilirsin..

Ornegin senin foo objende 20 tane method olsun...

public function x1(){}

public function x2(){}

public function x3(){}

Laravelde tanımladıgın bir foo facadesi için..

Foo::x1();

şeklinde kullanman gerek..Ama ide hatırlatmaz sana annotation yazmadıgın surece..Methodları bilmek zorundasın. bu yontem de benim asla hoşuma giden bir şey değil.Laravel cok magiclerle oynuyor o yüzden rahat kullanımı bazen yok ediyor...

Şöyle iki kod;

app('foo')->x1();

Foo::x1();

Mota mot aynı ikiside.Hic bir fark yok.O zaman facadeye ne ihtiyac var bilmiyorum smile extradan ikincisi için sınıf yapmak zorundasın ayrıca.

Velhasıl;

https://cangelis.com/laravel-facade-olmayan-facadelar/

can gelişin su yazısını okuyun...


Ha şu var ; mantığı kavramak için


Foo::x1();


ile nasıl ulasım saglıyorsun.Facade çocuk sınıfı temelde bir accessordan ibaret.Aslında işi yapan


https://github.com/laravel/framework/bl … Facade.php


su sınıf; php temel kullanımda x1() methodu burada yer almadıgı için direkt olarak sen aslında static __call methoduna yönlendiriliyorsun...

https://github.com/laravel/framework/bl … e.php#L229

bu linkte işaretlediğim yer...burayı takip ederek sahte çağırımla accessor aracılığı ile container nesnesine nasıl ulaştığını takip edebilirsiniz...

Tekrar söylemekte fayda var ki ; Laravelin facadeleri ancak container nesnesine kaydedilmiş değerler için geçerlidir.Kafanıza göre bir facade yazayım bir yerlere ulaşayım diye bir şey yok..

Eğer nesne container da mevcut değilse

https://github.com/laravel/framework/bl … e.php#L128


buradaki swap methodu ile cocuk sınıfta atama yaparsınız..
Ornegini date sınıfında görüyoruz..

https://github.com/laravel/framework/bl … e.php#L105


Son olarak şu bilgiyi de vereyim..Laravel facade sınıfında işi yapan sınıfta static::$app diye bir kullanım vardır.
Aslında bu daha once

https://github.com/laravel/framework/bl … e.php#L215

buradaki setFacadeApplication methodu ile atanmıştır.Peki nerde..

Laravelin yaşam çemberini bilirseniz.Bu aslında laravelin başlangıç processlerinde bulununan boot yöntemlerinde gelir..

https://github.com/laravel/framework/bl … es.php#L22

oda burada...

İyi calısmalar..

Son düzenleyen deathisonitsway (24.04.2019 13:09:13)


Laravel does not save you. Php knowledge only save you. Do not become a Laravel programmer, just the opposite,become php developer.

Çevrimdışı

#5 24.04.2019 14:13:39

dodiş
Üye
Yer: Mersin
Kayıtlı: 30.10.2017
Mesajlar: 46

Yanıt: Laravel Facades

anladım hocam teşekkürler elinize sağlık

Çevrimdışı

Forum alt kısmı