Symfony 2
Die Perle in einem SOA-Ozean
Wer sind wir?

Wer sind wir
Kifah Abbad & Marco Reinwarth
Wo arbeiten wir
devbliss GmbH
Agenda
Die Motivation Symfony 2 einzusetzen
und der Weg dorthin

Symfony Besonderheiten
& “Best Practices”
Motivation
Motivation Symfony 2 einzusetzen
“die Geschichte wie Symfony2 immer mehr
Gewicht bei devbliss bekommen hat”

“W...
Der Monolith
neue Ideen
Apps
Feed
Chat

Design

Responsive

Gamification
Notifications
Mobile
Services
GWT

Mobile

Reverse Proxy

?
Java
Service

Python
Service

...
PHP Legacy Code
Services
GWT

Mobile

Reverse Proxy

Symfony 2 - PHP REST Api
Java
Service

Python
Service

...
PHP Legacy Code
Services

Reverse Proxy
Routen
Konfiguration
Symfony 2 - PHP REST Api

PHP Legacy Code
Services

Reverse Proxy
Routen
Konfiguration
Symfony 2 - PHP REST Api

PHP Legacy Code
Services
Client

Reverse Proxy
verify

signing
Symfony 2 - PHP REST Api

Service
PHP Legacy Code
Services
GWT

Mobile

Reverse Proxy

Symfony 2 - PHP REST Api
Java
Service

Python
Service

...
PHP Legacy Code
Bestehende Systeme erweitern
Client
Mobile App
Entwickler
3rd Party Apps

Symfony 2 - PHP REST Api

PHP Legacy Code
Bestehende Systeme erweitern
Client

Symfony 2 Service

PHP Legacy Code
unser Weg vom Monolithen zu Symfony 2
●
●
●
●

klein beginnen
Continuous Shipping
aus Erfahrungen lernen
Symfonys Flexibil...
heute
Learning Management System
LMS
Symfony Applications
Talking AMQP

Question
Management

Assessment
Engine

AMQP
LMS
GWT

JS

Reverse Proxy

Question
Management

Assessment
Engine

Product & User Management

AMQP
Teil 2
Symfony Besonderheiten & “Best Practices”
Symfony2 Besonderheiten
Die Schönheit von Symfony2, kommt zur Geltung
Einheitlichkeit → DevblissBundle
● Abstrakter, Wiede...
Symfony2 Besonderheiten
Eigene Annotationen
Beispiel 1: JsonKey

GWT-Frontend

{ “myAnswers”=... }
class ActivityImportEve...
Symfony2 Besonderheiten
Eigene Annotationen
Beispiel 2: Signed Objects
@Route("/what/ever",
requirements = {...},
options ...
Symfony2 Besonderheiten
Eigene Annotationen
Beispiel 2: Signed Objects
@Route("/what/ever",
requirements = {...},
options ...
Symfony2 Besonderheiten
Event Listener 1 - Exceptions Listener
Reverse Proxy

Event:kernel.exception

Symfony2 App
→ devbl...
Symfony2 Besonderheiten
Eigene Error Exceptions Listener
● Keine HTML Seiten -> JSON-Error Payload
● Ins Symfony Log schre...
Symfony2 Besonderheiten
Eigener Exceptionslistener
//BadRequestException()
if ($classId == '') {
throw new BadRequestExcep...
Symfony2 Besonderheiten
Eigener Exceptions Listener
#service.yml (Devbliss Bundle)
services:
devbliss.exception_listener:
...
Symfony2 Besonderheiten
Event Listener 2 - Url Parameter Controller Listener
Reverse Proxy

Event:kernel.controller

Symfo...
Symfony2 Besonderheiten
Event Listener 3 - Url Parameter Controller Listener
/**
*
* @Route("activity/{id}",
*
requirement...
Symfony2 Besonderheiten
Event Listener - Reverse Proxy Session Listener
Reverse Proxy

Event:kernel.request

Symfony2 App ...
Symfony2 Besonderheiten
Allgemeiner Controller
● Wiederverwendbarkeit, Controller schlank halten
abstract class Controller...
Symfony2 Besonderheiten
Symfony Console Component
Symfony2 Besonderheiten
Symfony Console Component-Produkte Import
php app/console jura:prod_import

Products
Units
Section...
Symfony2 Besonderheiten
Doctrine Fixtures -> DB-Dumps
array()....
foreach…..

php app/console qm:dump_fixture
Symfony2 Besonderheiten
RabbitMQ-Consumers/Workers

php app/console ae:result_worker
Symfony2 Besonderheiten
Klassen in den DI-Container als Services service.yml
sams_memcached:
class:

"JuraMemcachedBundleS...
Symfony2 Besonderheiten
Weitere Populäre Symfony Features
● ORM/ODM Fixtures
● Symfony2 @Asserts, eigene Asserts
● Doctrin...
Symfony Code

Trennung und Individualisierung
Sources

/usr/share/hauptprojekt
configs ( z.B. parameter.yml)

/etc
Logs (p...
Continuous Integration
Continuous Integration

PHP Code Sniffer

Doctests
(Integration Tests)
Mockery
Fazit

Symfony2 ist und bleibt ein
wichtiger Teil unserer Infrastruktur
Symfony 2 Die Perle in einem SOA-Ozean

Danke!
Fragen ?
http://joind.in/9756
Slides bald auf http://www.devbliss.
com
Nächste SlideShare
Wird geladen in …5
×

Symfony live 2013 presentation

1.334 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.334
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
17
Aktionen
Geteilt
0
Downloads
6
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Symfony live 2013 presentation

  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

×