Symfony 2 Die Perle in einem SOA-Ozean
-
Upload
mareith -
Category
Technology
-
view
371 -
download
2
description
Transcript of Symfony 2 Die Perle in einem SOA-Ozean
Symfony 2Die Perle in einem SOA-Ozean
Wer sind wir?
Wer sind wirKifah Abbad & Marco Reinwarth
Wo arbeiten wirdevbliss 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
NotificationsGamification
Apps
Feed
Mobile
DesignResponsive
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 CodeService
signingverify
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 AppEntwickler3rd Party Apps
Bestehende Systeme erweitern
Client
PHP Legacy CodeSymfony 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 AnnotationenBeispiel 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 AnnotationenBeispiel 2: Signed Objects
@Route("/what/ever",
requirements = {...},
options = {
"payload" = {
"name" = {...},
"permission" = {
"required" = true,
"type" = "\User\Permission",
"signed" = true
},
}
}
Symfony2 Besonderheiten
Eigene AnnotationenBeispiel 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