How I Built A Reusable Symfony2 TaggingBundle
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

How I Built A Reusable Symfony2 TaggingBundle

on

  • 1,073 Views

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.

Statistiken

Views

Gesamtviews
1,073
Views auf SlideShare
1,073
Views einbetten
0

Actions

Gefällt mir
0
Downloads
2
Kommentare
1

0 Einbettungen 0

No embeds

Zugänglichkeit

Details hochladen

Uploaded via as OpenOffice

Benutzerrechte

© Alle Rechte vorbehalten

Report content

Als unangemessen gemeldet Als unangemessen melden
Als unangemessen melden

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

Löschen
  • Full Name Full Name Comment goes here.
    Sind Sie sicher, dass Sie...
    Ihre Nachricht erscheint hier
    Processing...
  • Wrong link on last slide.. Should be
    https://github.com/fogs/tagging-bundle
    Sind Sie sicher, dass Sie...
    Ihre Nachricht erscheint hier
    Processing...
Kommentar posten
Kommentar bearbeiten
  • 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

How I Built A Reusable Symfony2 TaggingBundle Presentation 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 (http://creativecommons.org/licenses/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 (http://creativecommons.org/licenses/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! http://github.com/fogs/TaggingBundle