Your SlideShare is downloading. ×
How I Built A Reusable Symfony2 TaggingBundle
Nächste SlideShare
Wird geladen in ...5

Thanks for flagging this SlideShare!

Oops! An error has occurred.


Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

How I Built A Reusable Symfony2 TaggingBundle


Published on

In this talk I gave at the Symfony User Group Hamburg, I describe how I built a reusable Symfony2 Bundle that allows the user to add tags to any Entity without having to copy & paste source code.

In this talk I gave at the Symfony User Group Hamburg, I describe how I built a reusable Symfony2 Bundle that allows the user to add tags to any Entity without having to copy & paste source code.

1 Comment
3 Gefällt mir
  • Wrong link on last slide.. Should be
    Sind Sie sicher, dass Sie...  Ja  Nein
    Ihre Nachricht erscheint hier
Keine Downloads
Bei Slideshare
Aus Einbettungen
Anzahl an Einbettungen
Gefällt mir
Einbettungen 0
No embeds

Inhalte melden
Als unangemessen gemeldet Als unangemessen melden
Als unangemessen melden

Wählen Sie Ihren Grund, warum Sie diese Präsentation als unangemessen melden.

No notes for slide
  • Willkommen Fragen, Anmerkungen, Meinungen Vorstellung seit 2001 Software & Betrieb Fauler Entwickler Wiederverwendung Hürden Technologie Lizenz Umsetzung
  • Patterns Anti-Patterns Warum nicht? Robbenbaby
  • Text-Input? Pre-filled list / checkboxes Tags Suche bei Google, KnpBundles „Tag“ + „Symfony2“ ist vergiftet (DependencyInjection) Wo noch suchen?
  • Eindeutigkeit der Bezeichner
  • FormTypes als Service Erlaubt Injection vom TagManager
  • Code in Entity überflüssig machen Controller soll Entity nach Tags befragen Besser: Event werfen, wenn Entity dirty ist..
  • JS/CSS files sind nicht teil meines Projekts Composer kümmert sich um Aktualisierung
  • Transcript

    • 1. Willkommen
    • 2. Anti-Pattern #1 Reusage by copy & paste Every time you do this, a baby seal dies Photo by Samuel Blanc via Wikimedia Commons [CC-BY-SA-3.0 (]
    • 3. Scenario Community web application Users seek other users by interests How to input data?
    • 4. I can haz tagz? Illustration by Kimhunghan via Wikimedia Commons [CC-BY-SA-3.0 (] Backend • fpn/tag-bundle Frontend • max-favilli/tagmanager + something in between
    • 5. fpn/tag-bundle Actually a Doctrine Extension in a Bundle Pro •Provides two new Entites: Tag & Tagging •TagManager handles model access Con •Some code to copy into our Entities •Lots of code to copy into our Controllers
    • 6. max-favilli/tagmanager jQuery plugin working nicely with twitter bootstrap Pro • Basically just two form inputs • Typeahead optional Con • Not a composer project
    • 7. Missing Puzzle Pieces Form Widget Data Transformer Form Type
    • 8. Form Widget Two input fields • visible for UI • hidden for „tagA, tagB, tagC“ Embed JavaScript & CSS Initialize JS
    • 9. Data Transformer transform() • convert Tags to „a, b, c“ reverseTransform() • convert „tagA, tagB, tagC“ to Tags • create Tags, if not existing • needs TagManager
    • 10. Form Type Provide name for widget Called in Application FormTypes Gets TagManager injected Defines DataTransformer
    • 11. Save the baby seals Entity Trait TaggableSubstriber make it reusable
    • 12. Entity Trait avoid copy & paste for each functional Entity classes reference TagManager • after loading the Entity • to inform TagManager during flush
    • 13. TaggableSubscriber postLoad() • attach TagManager to Entity postPersist() • TagManager->saveTagging($entity) onFlush() • save dirty Tags in TagManager Obsoletes code in Controllers
    • 14. Make it reusable Dedicated Bundle Create composer project But how to include external JS & CSS?
    • 15. Component RobLoach/component-installer Add package to composer.json Configure components-dir Run composer update See web/bundles
    • 16. Live Demo
    • 17. // TODO AppKernel: remove FPN bundle config.yml: remove FPN configuration Handling typeahead requests Configure tagmanager via Symfony Documentation :(
    • 18. (re-)use it!