Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Symfony 2 Die Perle in einem SOA-Ozean
Search
Marco Reinwarth
November 11, 2013
Programming
76
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Symfony 2 Die Perle in einem SOA-Ozean
This Presentation was held in german, at the Symfony Live Berlin 2013. on 07.11.2013
Marco Reinwarth
November 11, 2013
Other Decks in Programming
See All in Programming
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
750
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Rails World 2026, Austin, Texas
marcoroth
0
220
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
550
コードレビューのボトルネックを"する側"と"される側"の両面から解消する
yub0n
2
1.6k
SREの越境 / SRE Collaboration
y0hgi
2
310
Agents on Rails - Rails at Scale 2026
irinanazarova
0
560
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
590
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
140
気持ちぃ〜角丸 Squircle
ryu1013
0
310
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.5k
Featured
See All Featured
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
320
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
500
Documentation Writing (for coders)
carmenintech
77
5.6k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
Skip the Path - Find Your Career Trail
mkilby
1
260
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
30 Presentation Tips
portentint
PRO
1
430
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Making Projects Easy
brettharned
120
6.8k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
570
Transcript
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” “Wie kann ich mein bestehendes Projekt mit Symfony2 aufwerten”
Der Monolith
neue Ideen Chat Notifications Gamification Apps Feed Mobile Design Responsive
Services GWT Mobile Reverse Proxy PHP Legacy Code Java Service
Python Service ... ?
Services GWT Mobile Reverse Proxy Symfony 2 - PHP REST
Api PHP Legacy Code Java Service Python Service ...
Services Reverse Proxy Symfony 2 - PHP REST Api PHP
Legacy Code Routen Konfiguration
Services Reverse Proxy Symfony 2 - PHP REST Api PHP
Legacy Code Routen Konfiguration
Services Client Reverse Proxy Symfony 2 - PHP REST Api
PHP Legacy Code Service signing verify
Services GWT Mobile Reverse Proxy Symfony 2 - PHP REST
Api PHP Legacy Code Java Service Python Service ...
Bestehende Systeme erweitern Client Symfony 2 - PHP REST Api
PHP Legacy Code Mobile App Entwickler 3rd Party Apps
Bestehende Systeme erweitern Client PHP Legacy Code Symfony 2 -
Service
unser Weg vom Monolithen zu Symfony 2 • klein beginnen
• Continuous Shipping • aus Erfahrungen lernen • Symfonys Flexibilität nutzen
heute Learning Management System
LMS Assessment Engine Question Management AMQP Symfony Applications Talking AMQP
LMS GWT JS Reverse Proxy Product & User Management Assessment
Engine Question Management AMQP
Teil 2 Symfony Besonderheiten & “Best Practices”
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
Symfony2 Besonderheiten Eigene Annotationen Beispiel 1: JsonKey class ActivityImportEvent extends
Event { /** * answers property * @Assert\Type("array") * @Assert\NotNull(message="field_cannot_be_null") * @Assert\NotBlank(message="field_cannot_be_empty") * @JsonKey("myAnswers") */ protected $answers = array(); GWT-Frontend Reverse Proxy Symfony2 Backend $answers=.... { “myAnswers”=... }
Symfony2 Besonderheiten Eigene Annotationen Beispiel 2: Signed Objects @Route("/what/ever", requirements
= {...}, options = { "payload" = { "name" = {...}, "permission" = { "required" = true, "type" = "\User\Permission", "signed" = true }, } }
Symfony2 Besonderheiten Eigene Annotationen Beispiel 2: Signed Objects @Route("/what/ever", requirements
= {...}, options = { "payload" = { "name" = {...}, "permission" = { "required" = true, "type" = "\User\Permission[]”, "signed" = true }, } }
Symfony2 Besonderheiten Event Listener 1 - Exceptions Listener Reverse Proxy
Symfony2 App → devbliss.exception_listener Event:kernel.exception
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" }
Symfony2 Besonderheiten Eigener Exceptionslistener //BadRequestException() if ($classId == '') {
throw new BadRequestException(); } //ValidationException if (!$user->isValidPassword($newPassword)) { throw new ValidationException(array(),'new password invalid'); }
Symfony2 Besonderheiten Eigener Exceptions Listener #service.yml (Devbliss Bundle) services: devbliss.exception_listener:
class: Devbliss\CoreBundle\EventListener\ExceptionListener arguments: - @templating - @logger tags: - { name: kernel.event_listener, event: kernel.exception, method: onCoreException }
Symfony2 Besonderheiten Event Listener 2 - Url Parameter Controller Listener
Reverse Proxy Symfony2 App → devbliss.controller_listener.url_parameter Event:kernel.controller
Symfony2 Besonderheiten Event Listener 3 - Url Parameter Controller Listener
/** * * @Route("activity/{id}", * requirements = { * "id" = "\d+", * "tokens" = "(\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)
Symfony2 Besonderheiten Event Listener - Reverse Proxy Session Listener Reverse
Proxy Symfony2 App → devbliss.request_listener.reverse_proxy_session Event:kernel.request
Symfony2 Besonderheiten Allgemeiner Controller • Wiederverwendbarkeit, Controller schlank halten abstract
class Controller extends SymfonyController { protected function getSession() protected function performValidation() ......
Symfony2 Besonderheiten Symfony Console Component
Symfony2 Besonderheiten Symfony Console Component-Produkte Import Products Units Sections Activity
Sets php app/console jura:prod_import
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: "Jura\MemcachedBundle\Service\MemcachedService" arguments: [@service_container] quiz_service: class: "Jura\QuizBundle\Service\QuizService" arguments: [@service_container]
Symfony2 Besonderheiten Weitere Populäre Symfony Features • ORM/ODM Fixtures •
Symfony2 @Asserts, eigene Asserts • Doctrine Tree Extension Unit Section ActivitySet ActivitySet
Symfony Code Trennung und Individualisierung /usr/share/hauptprojekt /etc /var/log/hauptprojekt /var/cache/hauptprojekt Sources
configs ( z.B. parameter.yml) Logs (prod.log...usw) Caches (/prod….usw)
Continuous Integration
Continuous Integration Doctests (Integration Tests) PHP Code Sniffer 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