how i built a reusable symfony2 taggingbundle

Download How I Built A Reusable Symfony2 TaggingBundle

If you can't read please download the document

Upload: fogs24

Post on 20-Aug-2015

1.595 views

Category:

Technology


3 download

TRANSCRIPT

  1. 1. Willkommen
  2. 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. 3. Scenario Community web application Users seek other users by interests How to input data?
  4. 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. 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. 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. 7. Missing Puzzle Pieces Form Widget Data Transformer Form Type
  8. 8. Form Widget Two input fields visible for UI hidden for tagA, tagB, tagC Embed JavaScript & CSS Initialize JS
  9. 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. 10. Form Type Provide name for widget Called in Application FormTypes Gets TagManager injected Defines DataTransformer
  11. 11. Save the baby seals Entity Trait TaggableSubstriber make it reusable
  12. 12. Entity Trait avoid copy & paste for each functional Entity classes reference TagManager after loading the Entity to inform TagManager during flush
  13. 13. TaggableSubscriber postLoad() attach TagManager to Entity postPersist() TagManager->saveTagging($entity) onFlush() save dirty Tags in TagManager Obsoletes code in Controllers
  14. 14. Make it reusable Dedicated Bundle Create composer project But how to include external JS & CSS?
  15. 15. Component RobLoach/component-installer Add package to composer.json Configure components-dir Run composer update See web/bundles
  16. 16. Live Demo
  17. 17. // TODO AppKernel: remove FPN bundle config.yml: remove FPN configuration Handling typeahead requests Configure tagmanager via Symfony Documentation :(
  18. 18. (re-)use it! http://github.com/fogs/TaggingBundle