Symfony 2 Die Perle in einem SOA-Ozean

744 views

Published on

This Presentation was held in german, at the Symfony Live Berlin 2013. on 07.11.2013

Published in: Technology
1 Comment
1 Like
Statistics
Notes
  • Danke für das SlideShare und die wirklich interessanten Informationen.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
744
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
5
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Symfony 2 Die Perle in einem SOA-Ozean

  1. 1. Symfony 2 Die Perle in einem SOA-Ozean
  2. 2. Wer sind wir? Wer sind wir Kifah Abbad & Marco Reinwarth Wo arbeiten wir devbliss GmbH
  3. 3. Agenda Die Motivation Symfony 2 einzusetzen und der Weg dorthin Symfony Besonderheiten & “Best Practices”
  4. 4. Motivation Motivation Symfony 2 einzusetzen “die Geschichte wie Symfony2 immer mehr Gewicht bei devbliss bekommen hat” “Wie kann ich mein bestehendes Projekt mit Symfony2 aufwerten”
  5. 5. Der Monolith
  6. 6. neue Ideen Apps Feed Chat Design Responsive Gamification Notifications Mobile
  7. 7. Services GWT Mobile Reverse Proxy ? Java Service Python Service ... PHP Legacy Code
  8. 8. Services GWT Mobile Reverse Proxy Symfony 2 - PHP REST Api Java Service Python Service ... PHP Legacy Code
  9. 9. Services Reverse Proxy Routen Konfiguration Symfony 2 - PHP REST Api PHP Legacy Code
  10. 10. Services Reverse Proxy Routen Konfiguration Symfony 2 - PHP REST Api PHP Legacy Code
  11. 11. Services Client Reverse Proxy verify signing Symfony 2 - PHP REST Api Service PHP Legacy Code
  12. 12. Services GWT Mobile Reverse Proxy Symfony 2 - PHP REST Api Java Service Python Service ... PHP Legacy Code
  13. 13. Bestehende Systeme erweitern Client Mobile App Entwickler 3rd Party Apps Symfony 2 - PHP REST Api PHP Legacy Code
  14. 14. Bestehende Systeme erweitern Client Symfony 2 Service PHP Legacy Code
  15. 15. unser Weg vom Monolithen zu Symfony 2 ● ● ● ● klein beginnen Continuous Shipping aus Erfahrungen lernen Symfonys Flexibilität nutzen
  16. 16. heute Learning Management System
  17. 17. LMS Symfony Applications Talking AMQP Question Management Assessment Engine AMQP
  18. 18. LMS GWT JS Reverse Proxy Question Management Assessment Engine Product & User Management AMQP
  19. 19. Teil 2 Symfony Besonderheiten & “Best Practices”
  20. 20. Symfony2 Besonderheiten Die Schönheit von Symfony2, kommt zur Geltung Einheitlichkeit → DevblissBundle ● Abstrakter, Wiederverwendbarer Bundle ● git submodule ○ Eigene Annotationen (Custom Annotations) ○ Event Listener ○ Genereller Controller ○ ……..USW
  21. 21. Symfony2 Besonderheiten Eigene Annotationen Beispiel 1: JsonKey GWT-Frontend { “myAnswers”=... } class ActivityImportEvent extends Event { /** Reverse Proxy * answers property * @AssertType("array") * @AssertNotNull(message="field_cannot_be_null") * @AssertNotBlank(message="field_cannot_be_empty") * @JsonKey("myAnswers") Symfony2 Backend */ protected $answers = array(); $answers=....
  22. 22. Symfony2 Besonderheiten Eigene Annotationen Beispiel 2: Signed Objects @Route("/what/ever", requirements = {...}, options = { "payload" = { "name" = {...}, "permission" = { "required" = true, "type" "signed" }, } } = "UserPermission", = true
  23. 23. Symfony2 Besonderheiten Eigene Annotationen Beispiel 2: Signed Objects @Route("/what/ever", requirements = {...}, options = { "payload" = { "name" = {...}, "permission" = { "required" = true, "type" "signed" }, } } = "UserPermission[]”, = true
  24. 24. Symfony2 Besonderheiten Event Listener 1 - Exceptions Listener Reverse Proxy Event:kernel.exception Symfony2 App → devbliss.exception_listener
  25. 25. Symfony2 Besonderheiten Eigene Error Exceptions Listener ● Keine HTML Seiten -> JSON-Error Payload ● Ins Symfony Log schreiben ● Eindeutige ID zum Wiedererkennen { "errorDetail":[ ], "errorId":"4564b6456456b54645b6", "errorMessage":"users_userid_avatar_put_no_payload", "errorType":"Exception" }
  26. 26. Symfony2 Besonderheiten Eigener Exceptionslistener //BadRequestException() if ($classId == '') { throw new BadRequestException(); } //ValidationException if (!$user->isValidPassword($newPassword)) { throw new ValidationException(array(),'new password invalid'); }
  27. 27. Symfony2 Besonderheiten Eigener Exceptions Listener #service.yml (Devbliss Bundle) services: devbliss.exception_listener: class: DevblissCoreBundleEventListenerExceptionListener arguments: - @templating - @logger tags: - { name: kernel.event_listener, event: kernel.exception, method: onCoreException }
  28. 28. Symfony2 Besonderheiten Event Listener 2 - Url Parameter Controller Listener Reverse Proxy Event:kernel.controller Symfony2 App → devbliss.controller_listener.url_parameter
  29. 29. Symfony2 Besonderheiten Event Listener 3 - Url Parameter Controller Listener /** * * @Route("activity/{id}", * requirements = { * "id" * "tokens" = "d+", = "(d+(?:,d+)*)", * } * ) */ public function getActivityResults($id, Array $tokens) { Route: activity/45/5 => $id = 45, $tokens = array(5) Route: activity/45/5,6,7 => $id = 45, $tokens = array(5,6,7)
  30. 30. Symfony2 Besonderheiten Event Listener - Reverse Proxy Session Listener Reverse Proxy Event:kernel.request Symfony2 App → devbliss.request_listener.reverse_proxy_session
  31. 31. Symfony2 Besonderheiten Allgemeiner Controller ● Wiederverwendbarkeit, Controller schlank halten abstract class Controller extends SymfonyController { protected function getSession() protected function performValidation() ......
  32. 32. Symfony2 Besonderheiten Symfony Console Component
  33. 33. Symfony2 Besonderheiten Symfony Console Component-Produkte Import php app/console jura:prod_import Products Units Sections Activity Sets
  34. 34. Symfony2 Besonderheiten Doctrine Fixtures -> DB-Dumps array().... foreach….. php app/console qm:dump_fixture
  35. 35. Symfony2 Besonderheiten RabbitMQ-Consumers/Workers php app/console ae:result_worker
  36. 36. Symfony2 Besonderheiten Klassen in den DI-Container als Services service.yml sams_memcached: class: "JuraMemcachedBundleServiceMemcachedService" arguments: [@service_container] quiz_service: class: "JuraQuizBundleServiceQuizService" arguments: [@service_container]
  37. 37. Symfony2 Besonderheiten Weitere Populäre Symfony Features ● ORM/ODM Fixtures ● Symfony2 @Asserts, eigene Asserts ● Doctrine Tree Extension Section ActivitySet Unit ActivitySet
  38. 38. Symfony Code Trennung und Individualisierung Sources /usr/share/hauptprojekt configs ( z.B. parameter.yml) /etc Logs (prod.log...usw) /var/log/hauptprojekt Caches (/prod….usw) /var/cache/hauptprojekt
  39. 39. Continuous Integration
  40. 40. Continuous Integration PHP Code Sniffer Doctests (Integration Tests) Mockery
  41. 41. Fazit Symfony2 ist und bleibt ein wichtiger Teil unserer Infrastruktur
  42. 42. Symfony 2 Die Perle in einem SOA-Ozean Danke! Fragen ? http://joind.in/9756 Slides bald auf http://www.devbliss. com

×