Co jsou to tagy a k čemu je to dobré?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Climber007
Člen | 105
+
0
-

Ahoj,

občas o nich čtu, občas je musím i použít, ale pořád nevím proč? Myslím tagy v konfiguračním souboru. V dokumentaci je o nich pouze jeden řádek a nic víc.

Chtěl bych poprosit někoho kdo umí i tomu nejhloupějšímu vysvětlit, co je to jaderná fúze, k čemu jsou tagy dobré a kdy je tedy používat.

Díky

David Kudera
Člen | 455
+
+2
-

Pravděpodobně s nimi pracovat vůbec nepotřebuješ, občas se ale hodí. Pomocí tagů totiž můžeš říct nějakému rozšíření, aby se službou něco udělal.

Třeba existuje tag run, pokud ho použiješ, tak nette automaticky službu při startu „spustí“.

Nebo je třeba využívá kdyby/events, kde jimi označíš svou službu jako subscriber.

V rozšířeních je totiž možné najít všechny definice služeb podle nějakého tagu, což je určitě lepší, než pracovat úplně se všemi definicemi všech služeb.

Editoval David Kudera (17. 7. 2015 12:23)

Tomáš Votruba
Moderator | 1114
+
+1
-

Ahoj,

jednoduše řečeno: tagem můžeš označit služby. Tyto služby si pak můžeš později všechny posbírat právě pomocí tagu a nějak je zpracovat.

Např. otaguješ všechny služby, které jsou subscriber (viz Kdyby\Events) a Nette je pak předá EventManageru, který si je pomocí tagu všechny vytáhne a zpracuje.

Pokud bys je tagem neoznačil, EventManager (či jakýkoliv jiný „sběrač“), by o nich nevěděl a musel bys to dělat růčo.

David Matějka
Moderator | 6445
+
+2
-

Slouzeji k oznaceni sluzeb tagem, pokud to napriklad vyzaduje nejaka extension. V nette, pokud se nepletu, je vyuzit akorat tag run, kterym oznacis sluzby, ktere se maji spustit automaticky vzdy po vytvoreni DI kontejneru.

Ale hojne vyuzivaji tagy ruzne doplnky – treba kdyby/translation, ktery podporuje hned 3 tagy. Krom toho, tagy muzou mit i nejake svoje atributy, coz je videt prave u kdyby/translation, kde tag loader ma v atributech informaci o tom, jaky format zpracovava. Pokud by sis tedy napsal vlastni loader, registrujes ho jako sluzbu a pridas mu odpovidajici tag:

services:
	-
		class: MySuperFormatLoader
		tags:
			translation.loader: mySuperFileExtension

translation si pak vytahne vsechny sluzby s timhle tagem a udela s nimi vse, co potrebuje.