SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
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
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 Flexibilität nutzen
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, Wiederverwendbarer Bundle
● git submodule
○ Eigene Annotationen (Custom Annotations)
○ Event Listener
○ Genereller Controller
○ ……..USW
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=....
Symfony2 Besonderheiten
Eigene Annotationen
Beispiel 2: Signed Objects
@Route("/what/ever",
requirements = {...},
options = {
"payload" = {
"name" = {...},
"permission" = {
"required" = true,
"type"
"signed"
},
}
}

= "UserPermission",
= true
Symfony2 Besonderheiten
Eigene Annotationen
Beispiel 2: Signed Objects
@Route("/what/ever",
requirements = {...},
options = {
"payload" = {
"name" = {...},
"permission" = {
"required" = true,
"type"
"signed"
},
}
}

= "UserPermission[]”,
= true
Symfony2 Besonderheiten
Event Listener 1 - Exceptions Listener
Reverse Proxy

Event:kernel.exception

Symfony2 App
→ devbliss.exception_listener
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: DevblissCoreBundleEventListenerExceptionListener
arguments:
- @templating
- @logger
tags:
- { name: kernel.event_listener, event: kernel.exception, method:
onCoreException }
Symfony2 Besonderheiten
Event Listener 2 - Url Parameter Controller Listener
Reverse Proxy

Event:kernel.controller

Symfony2 App → devbliss.controller_listener.url_parameter
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)
Symfony2 Besonderheiten
Event Listener - Reverse Proxy Session Listener
Reverse Proxy

Event:kernel.request

Symfony2 App → devbliss.request_listener.reverse_proxy_session
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
php app/console jura:prod_import

Products
Units
Sections
Activity Sets
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:

"JuraMemcachedBundleServiceMemcachedService"

arguments:

[@service_container]

quiz_service:
class:

"JuraQuizBundleServiceQuizService"

arguments:

[@service_container]
Symfony2 Besonderheiten
Weitere Populäre Symfony Features
● ORM/ODM Fixtures
● Symfony2 @Asserts, eigene Asserts
● Doctrine Tree Extension
Section
ActivitySet

Unit
ActivitySet
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
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

Weitere ähnliche Inhalte

Ähnlich wie Symfony live 2013 presentation

Automatisierung von Windows-Anwendungen
Automatisierung von Windows-AnwendungenAutomatisierung von Windows-Anwendungen
Automatisierung von Windows-AnwendungenAndreas Schreiber
 
Offensive Security – Das Metasploit Framework
Offensive Security – Das Metasploit FrameworkOffensive Security – Das Metasploit Framework
Offensive Security – Das Metasploit FrameworkQAware GmbH
 
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbHEntwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbHstijink
 
Celery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für DjangoCelery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für DjangoMarkus Zapke-Gründemann
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerGregor Biswanger
 
APIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenAPIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenRalf Eggert
 
Open Source Workflowmanagement mit BPMN und CMMN
Open Source Workflowmanagement mit BPMN und CMMNOpen Source Workflowmanagement mit BPMN und CMMN
Open Source Workflowmanagement mit BPMN und CMMNcamunda services GmbH
 
OpenSocial und Apache Shindig
OpenSocial und Apache ShindigOpenSocial und Apache Shindig
OpenSocial und Apache ShindigMayflower GmbH
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreGregor Biswanger
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?Marc Müller
 
Celery eine asynchrone task queue (nicht nur) für django
Celery   eine asynchrone task queue (nicht nur) für djangoCelery   eine asynchrone task queue (nicht nur) für django
Celery eine asynchrone task queue (nicht nur) für djangoMarkus Zapke-Gründemann
 
JavaScript-Entwicklung mit den Chrome DevTools
JavaScript-Entwicklung mit den Chrome DevToolsJavaScript-Entwicklung mit den Chrome DevTools
JavaScript-Entwicklung mit den Chrome DevToolsVolker Rose
 
Login mit Facebook? Login mit Google? Oder Login mit "meine firma"?!? OpenID ...
Login mit Facebook? Login mit Google? Oder Login mit "meine firma"?!? OpenID ...Login mit Facebook? Login mit Google? Oder Login mit "meine firma"?!? OpenID ...
Login mit Facebook? Login mit Google? Oder Login mit "meine firma"?!? OpenID ...Univention GmbH
 
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und JavaJUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und Javacamunda services GmbH
 
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Stephan Hochdörfer
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrants0enke
 

Ähnlich wie Symfony live 2013 presentation (20)

Automatisierung von Windows-Anwendungen
Automatisierung von Windows-AnwendungenAutomatisierung von Windows-Anwendungen
Automatisierung von Windows-Anwendungen
 
SignalR
SignalRSignalR
SignalR
 
Offensive Security – Das Metasploit Framework
Offensive Security – Das Metasploit FrameworkOffensive Security – Das Metasploit Framework
Offensive Security – Das Metasploit Framework
 
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbHEntwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
Entwicklungsprozess und Arbeit mit Symfony2 in der fotocommunity GmbH
 
Celery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für DjangoCelery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für Django
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen Hacker
 
APIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenAPIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellen
 
Open Source Workflowmanagement mit BPMN und CMMN
Open Source Workflowmanagement mit BPMN und CMMNOpen Source Workflowmanagement mit BPMN und CMMN
Open Source Workflowmanagement mit BPMN und CMMN
 
camunda BPM @ JUG München
camunda BPM @ JUG Münchencamunda BPM @ JUG München
camunda BPM @ JUG München
 
OpenSocial und Apache Shindig
OpenSocial und Apache ShindigOpenSocial und Apache Shindig
OpenSocial und Apache Shindig
 
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET CoreHands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
 
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
DWX 2016 - Monitoring 2.0 - Monitoring 2.0: Alles im Lot?
 
Celery eine asynchrone task queue (nicht nur) für django
Celery   eine asynchrone task queue (nicht nur) für djangoCelery   eine asynchrone task queue (nicht nur) für django
Celery eine asynchrone task queue (nicht nur) für django
 
20101117 activiti
20101117 activiti20101117 activiti
20101117 activiti
 
Serverless: The Missing Manual
Serverless: The Missing ManualServerless: The Missing Manual
Serverless: The Missing Manual
 
JavaScript-Entwicklung mit den Chrome DevTools
JavaScript-Entwicklung mit den Chrome DevToolsJavaScript-Entwicklung mit den Chrome DevTools
JavaScript-Entwicklung mit den Chrome DevTools
 
Login mit Facebook? Login mit Google? Oder Login mit "meine firma"?!? OpenID ...
Login mit Facebook? Login mit Google? Oder Login mit "meine firma"?!? OpenID ...Login mit Facebook? Login mit Google? Oder Login mit "meine firma"?!? OpenID ...
Login mit Facebook? Login mit Google? Oder Login mit "meine firma"?!? OpenID ...
 
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und JavaJUG Luzern: Open Source BPM mit BPMN 2.0 und Java
JUG Luzern: Open Source BPM mit BPMN 2.0 und Java
 
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
Große Systeme, lose Kopplung, Spaß bei der Arbeit! - WDC12
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 

Symfony live 2013 presentation