Facade in Laravel - Ce sunt, cum le folosim si cum ne facem propriile Facade

Stefanescu Mihai 2 years ago iNoob

In acest articol am sa vorbesc despre fatadele din laravel, am povestesc putin cum de putem apela metode ce nu sunt statice ca si cand ar fi statice, de ce avem nevoie sa facem asta si mai ales cum putem implmenta si noi treaba asta :)

Fatadele ne ofera posibilitatea de a apela o metoda ca fiind statica, desi nu este statica. Nu stiu daca m-am exprima chiar corect, am sa incerc sa explic printr-un exemplu:

Presupunem ca vrem sa bagam ceva in cache, o sa facem ceva de genul:

cache()->set('name', 'Iron Man');

apoi, pentru a lua valoarea respectiva din cache vom face:

cache()->get('name');

Ok, am scris treaba asta in routes/web.php, am dat un dd de get si am vazut ca treaba asta functioneaza exact cum ar trebui si ca set()/get() sunt metode non-statice.

Dar, daca ai mai lucrat cu laravel pana acum stii foarte bine ca poti apela fix acelasi metode folosind fatadele, adica:

Cache::set('name', 'Iron Man');

si, de asemenea get-ul

Cache::get('name');

Din nou, rulam aceasta treaba si observam ca functioneaza exact ca mai devreme, fara probleme.

Hai sa mergem la cache repository \Illuminate\Cache\Repository si sa vedem ce metode avem aici.

Putem observa foarte rapid ca metodele \Illuminate\Cache\Repository::set si \Illuminate\Cache\Repository::get nu sunt statice.

Ok, deci am verificat ca putem apela metodele astea atat static, cat si normal, ne-am uitat la cod sa vedem cum sunt ele de fapt scrise, dar totusi cum le apeleaza laravel-ul atat static cat si normal?

Hai sa deschidem fatada clasei de Cache de la \Illuminate\Support\Facades\Cache si observam ca extinde clasa Facade, iar aceasta clasa Cache (pe care am folosit-o mai devreme sa apelam set()/get()) are o singura metoda, getFacadeAccessor() care intoarce un string.

Acest string intors este de fapt numele cu care a fost bind-uita pe service container clasa pe care o cautam, dar despre service container am sa scriu un articol separat pentru ca este un subiect destul de mare.

Ok, cred ca am raspuns la primele 2 intrebari, Ce este Facade? Cum le folosim? Ne-a mai ramas ultima treaba, cum putem implementa si noi Facade pentru clasele noastre?

Pentru a explica asta am sa iau un exemplu cat se poate de simplu, haideti sa pornim de la clasa noastra:

class Bacon {
	public function fry()
	{
		return 'we put bacon in pan';
	}
	
	public function eat()
	{
		return  'bacon in plate then in belly';
	}
}

Ok, in clipa asta putem apela cele 2 metoda in modul traditional:

$bacon = new Bacon():
$bacon->fry();
$bacon->eat();

Dar, cum putem face o fatada pentru aceasta clasa?

Hai sa definim o clasa noua BaconFacade:

class BaconFacade{
    public static function __callStatic($name, $args)
    {
        dd($name);
    }
}

dupa cum putem observa am pus un dd (die & dump) aici, acum daca apelez

BaconFacade::oriceNumeDeFunctieAici()

o sa imi intoarca string-ul oriceNumeDeFunctieAici.

Ok, acum, daca bind-uiesc clasa mea la container astfel:

app()->bind('bacon', function(){
   return new Bacon(); 
});

In clasa BaconFacade, in metoda magica callStatic pot lua clasa dorita din service container si pot apela metoda cautata.

Iata cum arata clasa mea BaconFacade acum:

class BaconFacade{
    public static function __callStatic($name, $args)
    {
        return app()->make('bacon')->$name();
    }
}

Acum, daca apelez metoda fry() om mod static:

dd(BaconFacade::fry());

o sa primesc sirul de caractere

"we put bacon in pan"

Cred ca am explicat sum functioneaza Facade si am invatat cum sa facem si noi o fatada.

Sper ca din acest articol ati invatata ceva si daca aveti intrebari va rog sa le lasati mai jos, in comentarii.

Programator de ~8 ani, am lucrat la proiecte din mai multe industrstrii, de la eCommerce la telecomunicatii la automatizari. In acest timp am folosi diferite tehnologii, de la PHP, MySQL, PostgreSql, RabbitMq, Redis, Memcached si altele.


Get in touch
Pentru nelamuriri, dubii, comentarii si chestii de pe suflet ne putem auzi pe Discord, Reddit sau poti deschide o discutie noua pe forum

earn extra income promoting natural supplements # 6 months ago residual income natural supplements for hair growth affiliate program affiliate marketing programs for health products affiliate marketing programs for health products
Yoga Mat Set # 5 months ago Thanks to my father who informed me about this web site, this blog is actually amazing.
Ucwqcg # 1 month ago order tricor 160mg online <a href="https://fenoficor.com/">order tricor 200mg pill</a> fenofibrate 160mg usa
Zswxba # 1 month ago ketotifen tablet <a href="https://geozipin.shop/">pill sinequan</a> order tofranil 75mg generic
Eejcli # 1 month ago acarbose pills <a href="https://tofobose.shop/">buy generic precose</a> buy griseofulvin
Ztwtdt # 4 weeks ago brand aspirin 75 mg <a href="https://levquinon.shop/">buy hydroquinone paypal</a> zovirax buy online
Qnptrv # 3 weeks ago dydrogesterone 10mg for sale <a href="https://empaolol.com/">order jardiance 10mg sale</a> buy jardiance 25mg pills
Xdygai # 3 weeks ago etodolac 600mg brand <a href="https://colotazol.shop/">cilostazol 100 mg uk</a> cheap cilostazol 100 mg
Fabqtm # 2 weeks ago buy prasugrel medication <a href="https://detorbic.com/">tolterodine uk</a> purchase tolterodine without prescription
Xexutw # 2 weeks ago buy mestinon 60 mg online cheap <a href="https://mestien.com/">order mestinon online cheap</a> maxalt 5mg over the counter
Okhhuo # 2 weeks ago buy generic ferrous over the counter <a href="https://fertonel.com/">purchase ferrous sulfate online</a> purchase betapace online
Jnksqc # 2 weeks ago buy vasotec online cheap <a href="https://betaotec.shop/">order enalapril 10mg</a> purchase duphalac generic
Dkripo # 1 week ago brand xalatan <a href="https://aexeloda.com/">capecitabine us</a> rivastigmine 6mg usa
Bfirxr # 1 week ago betahistine 16 mg us <a href="https://benedolac.com/">buy probalan without a prescription</a> buy benemid cheap
Fgvcys # 1 week ago buy micardis <a href="https://molnenil.shop/">movfor cost</a> molnunat where to buy
Limjbj # 5 days ago cenforce 100mg cost <a href="https://chlodinir.com/">purchase chloroquine sale</a> aralen brand
Club-ul este dedicat membrilor si ofera access la mai multe zone ale website-ului.
Login Register

๐Ÿ”– Bookmarks โž•
โœจ Pentru a sustine aceasta comunitate am sa te rog sa te autentifici sau sa te inregistrezi!

๐ŸŒช๏ธ Discord โž•
Back to top
Folosim cookie-uri pentru a oferi functionalitatile critice ale aplicatiei Invata-Programare. Folosim cookie-uri si pentru a analiza traficul, pentru care e nevoie de consimtamantul dvs. explicit.