V-ati saturat sa adaugati CompilerPasses doar pentru a colecta cateva servicii etichetate pe container?
Spuneti NU celor mai multi dintre ei cu acest pachet!
⚠ Nota ⚠
Atentie la schimbarea spatiului de nume
- Inainte de 0.4.0: Berny \ Bundle \ TagBundle
- Dupa 0.4.0: xPheRe \ Bundle \ TagBundle
De ce as vrea asta?
De mai multe ori doriti sa cautati servicii etichetate cu o anumita eticheta si sa apelati o metoda din serviciul dvs. cu acestea. Acest lucru se poate face cu un CompilerPass personalizat.
Un alt caz de utilizare este de a injecta un serviciu fiecaruia care este etichetat cu o anumita eticheta. Un exemplu:
Aceasta boilerplate se repeta o data si din nou in fiecare proiect pe care l-am vazut. Cu acest pachet puteti spune la revedere de la majoritatea acestor treceri de compilator.
Caracteristici
Cu acest pachet puteti:
- Etichetati un serviciu ca consumator al unei alte etichete.
- Etichetati un serviciu ca injectabil in altele.
Compatibilitate
Testat sub Symfony2, de la 2.0.10 la 2.6.3
Instalare
De la compozitor / ambalator
- Solicitati pachetul xphere / tag-bundle in compozitor
- Adaugati pachetul in AppKernel.php
Utilizare
Consumator
Puteti defini un serviciu ca „consumator de etichete” al altei etichete si lasati pachetul sa faca relatia dintre ele. Doar etichetati-va serviciul ca tag.consumer si specificati ce eticheta sa colectati si ce metoda sa apelati.
Primul exemplu care utilizeaza acest pachet este doar configurarea:
Singura modificare este eticheta din my_plugin_enumerator. Placa centrala CompilerPass a disparut.
Aceasta apeleaza PluginEnumerator :: addPlugin cu fiecare my_plugin, dar puteti apela o data cu toate serviciile folosind parametrul masiv.
Acesta apeleaza PluginEnumerator :: addPlugins o singura data, cu o serie de servicii.
Pentru a face serviciul sa isi consume dependentele prin intermediul constructorului sau, trebuie doar sa omiteti atributul metodei din eticheta.
Injectabil
Puteti defini un serviciu ca „eticheta injectabila” dintr-o alta eticheta si lasati pachetul sa faca munca grea.
guarras masturbandose pajas trans
violada xxx pelis porno españolas
megan montaner follando maduras americanas
esposas compartidas incesto madre hijos
videos prono trio por sorpresa
xxx incesto real xxx torrent magnet
madres incestuosas incesto jovencitas
vecinas cachondas abuelas a cuatro patas
monica hoyos porno porno español dinero
pilladas cagando pillados follando
folladas extremas videos heroticos
corridas en la garganta suegras españolas follando
enseñando a follar pilladas cagando
jolla pr viejas muy calientes
mujer masturbandose porno por el culo
violadas xxx travestis meando
pornolesvianas mujeres peludas follando
potno peliculas porno traducidas al castellano
maduras españolas anal peliculas eroticas alemanas
guarras.com videos porno trios español
Doar etichetati serviciul ca eticheta.injectabila si specificati ce eticheta sa colectati si ce metoda sa apelati in fiecare serviciu.
Al doilea exemplu din introducere va fi astfel:
Singura modificare este eticheta din my_event_dispatcher. Boilerul CompilerPass a disparut, de asemenea.
Acest lucru forteaza toate my_event_dispatcher.aware sa aiba o metoda setMyEventDispatcher. Dar puteti schimba acest lucru pentru un anumit serviciu cu parametrul metoda.
Acum apeleaza setEventDispatcher pentru UselessService si metoda implicita pentru celelalte.
Utilizare avansata
Este vorba despre elementele de baza, exista totusi mai multe optiuni disponibile pentru controlul major asupra dependentelor dvs.
Ordin
Puteti specifica ordinea in care serviciile vor fi injectate consumatorului cu campul de comanda din fiecare eticheta. Comenzile mai mici au prioritate fata de comenzile mai mari. Serviciile etichetate fara comanda vor fi injectate dupa cele comandate. In cazul unei legaturi intre ordine, pastreaza ordinea de declaratie symfony.
Indexarea serviciilor in bloc
Cand masa este activa, puteti specifica o cheie care va fi utilizata pentru indexarea fiecarei etichete, in loc de o matrice simpla.
Acest lucru duce la urmatoarea injectie:
De asemenea, puteti specifica faptul ca mai multe elemente vor intra in coliziune cu acelasi index si trebuie sa colecteze tablouri in loc de servicii unice cu campul multiplu din definitia consumatorului.
Acest lucru duce la urmatoarea injectie:
Multiple, de asemenea, onoreaza comanda, daca se specifica.
Referinta
Ca de obicei, dependentele sunt injectate direct in serviciul dvs., dar va puteti injecta dependentele ca ID-uri de serviciu, setand referinta campului la fals in definitia consumatorului.
Instanta de
Puteti forta dependentele dvs. sa fie o instanta a unei clase sau a unei interfete cu campul instanceof din definitia dvs. de consumator.
Fara pachet
Puteti adauga manual TagConsumerPass sau TagInjectablePass (sau ambele) fara a adauga pachetul „intreg” la Kernel, chiar si personalizati numele etichetelor utilizate pentru a le aplica.
In nucleul dvs.:








