SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
Legacy Anwendungen mitLegacy Anwendungen mit
ZendExpressive modernisierenZendExpressive modernisieren
Ralf EggertRalf Eggert
CEO Travello GmbH, ZF Trainer, Autor, Coach,CEO Travello GmbH, ZF Trainer, Autor, Coach,
PHP Entwickler & Alexa Skill EntwicklerPHP Entwickler & Alexa Skill Entwickler
Fragen ans PublikumFragen ans Publikum
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 44 vonvon 5353
AgendaAgenda
Teil 1: Überblick ZendExpressiveTeil 1: Überblick ZendExpressive
Teil 2: Vorbereitungen für MigrationTeil 2: Vorbereitungen für Migration
Teil 3: Migration vom ZF1 MVC zu ZF3 MiddlewareTeil 3: Migration vom ZF1 MVC zu ZF3 Middleware
Bonus-Teil 4: Migration anderer Projekte zu ZF3 MiddlewareBonus-Teil 4: Migration anderer Projekte zu ZF3 Middleware
Teil 1Teil 1
Überblick ZendExpressiveÜberblick ZendExpressive
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 66 vonvon 5353
Zend Framework 3Zend Framework 3
Ich bin zwei
Öltanks
FRAMEWORKS
FRAMEWORKS
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 77 vonvon 5353
Was ist der PSR-7?Was ist der PSR-7?
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 88 vonvon 5353
Was istWas ist derder PSR-15?PSR-15?
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 99 vonvon 5353
Zend Framework KomponentenZend Framework Komponenten
ZEND
DIACTOROS
ZENDSTRATIGILITY
ZENDEXPRESSIVE
HTTP MESSAGES /PSR-7
MIDDLEWARE / PSR-15
MIDDLEWARE
APPLICATIONS
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1010 vonvon 5353
ZendExpressiveZendExpressive KomponentenKomponenten
Router DI Container Template Renderer Error Handler
Aura.Router
FastRoute
ZendRouter
Weitere Router
Aura.DI
Pimple-interop
Zend
ServiceManager
Weitere
DI Container
Plates
Twig
ZendView
Weitere
Template-Engines
Whoops
Weitere
Error-Handler
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1111 vonvon 5353
Klassischer HTTP RequestKlassischer HTTP Request
CLIENT WEBSERVER
HTTP
REQUEST
HTTP
RESPONSE
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1212 vonvon 5353
Middleware-RequestMiddleware-Request
HTTP
Request
HTTP
Response
Middleware-Pipeline
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1313 vonvon 5353
Middleware-PipelineMiddleware-Pipeline
HTTP
Request
HTTP
Response
Routing
Middleware
Authorization
Middleware
Dispatching
Middleware
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1414 vonvon 5353
Middleware-AktionenMiddleware-Aktionen
HTTP
Request
HTTP
Response
Routing
Middleware
Action
Middleware
Authorization
Middleware
Dispatching
Middleware
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1515 vonvon 5353
Beispiele für Action-MiddlewareBeispiele für Action-Middleware
Teil 2Teil 2
Vorbereitungen für MigrationVorbereitungen für Migration
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1717 vonvon 5353
1. Eigener Branch für Migration1. Eigener Branch für Migration
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1818 vonvon 5353
2. Upgrade auf neuestes PHP 72. Upgrade auf neuestes PHP 7
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1919 vonvon 5353
3. Composer installieren3. Composer installieren
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2020 vonvon 5353
4. Autoloading nur per Composer4. Autoloading nur per Composer
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2121 vonvon 5353
5. Alle Pakete (!) per Composer5. Alle Pakete (!) per Composer
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2222 vonvon 5353
6. Anwendung lauffähig machen6. Anwendung lauffähig machen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2323 vonvon 5353
7. Expressive separat installieren7. Expressive separat installieren
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2424 vonvon 5353
Checkliste VorbereitungenCheckliste Vorbereitungen
Eigenen Branch für Migration einrichtenEigenen Branch für Migration einrichten
11
Upgrade auf PHP 7Upgrade auf PHP 7
22
Composer installieren (falls noch nicht geschehen)Composer installieren (falls noch nicht geschehen)
33
Autoloading ausschließlich über Composer einrichtenAutoloading ausschließlich über Composer einrichten
44
Alle Pakete und Abhängigkeiten per Composer installierenAlle Pakete und Abhängigkeiten per Composer installieren
55
Anwendung lauffähig machenAnwendung lauffähig machen
66
Expressive Skeleton in separatem Verzeichnis installierenExpressive Skeleton in separatem Verzeichnis installieren
77
Teil 3Teil 3
Migration vom ZF1 MVC zu ZF3 MiddlewareMigration vom ZF1 MVC zu ZF3 Middleware
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2626 vonvon 5353
1. Eigenes Legacy Verzeichnis1. Eigenes Legacy Verzeichnis
Vorher
 application
 controllers
 forms
 models
 views
 Bootstrap.php
 data
 cache
 library
 Custom
 public
 css
 img
 index.php
 vendor
 zendframework
 composer.json
Nachher
 data
 cache
 legacy
 application
 controllers
 forms
 models
 views
 Bootstrap.php
 library
 Custom
 public
 css
 img
 index.php
 vendor
 zendframework
 composer.json
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2727 vonvon 5353
2. ZendExpressive installieren2. ZendExpressive installieren
Vorher
 data
 cache
 legacy
 application
 library
 public
 css
 img
 index.php
 vendor
 composer.json
Nachher
 config
 autoload
 config.php
 container.php
 data
 cache
 legacy
 application
 library
 module
 Application
 public
 css
 img
 index.php.bak (ZF1)
 index.php (ZF3)
 vendor
 composer.json
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2828 vonvon 5353
2. ZendExpressive testen2. ZendExpressive testen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2929 vonvon 5353
3. Legacy Application Middleware3. Legacy Application Middleware
namespace LegacyMiddleware;
use InteropHttpServerMiddlewareDelegateInterface;
use InteropHttpServerMiddlewareMiddlewareInterface;
use PsrHttpMessageServerRequestInterface;
use ZendDiactorosResponseHtmlResponse;
use ZendExpressiveRouterRouteResult;
class LegacyApplicationMiddleware implements MiddlewareInterface
{
public function process(ServerRequestInterface $request, DelegateInterface $delegate)
{
$result = $request->getAttribute(RouteResult::class, false);
if ($result instanceof RouteResult) {
return $delegate->process($request);
}
ob_start();
$application = new Zend_Application(
APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();
$application->run();
$output = ob_get_contents();
ob_end_clean();
return new HtmlResponse($output);
}
}
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3030 vonvon 5353
3. ZF3 Startseite testen3. ZF3 Startseite testen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3131 vonvon 5353
3. ZF1 Anwendung testen3. ZF1 Anwendung testen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3232 vonvon 5353
3. ZF3 Home Route ausblenden3. ZF3 Home Route ausblenden
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3333 vonvon 5353
4. Neue Test-Aktion4. Neue Test-Aktion
Vorher
 config
 data
 legacy
 module
 Application
 src
 Action
 HomePageAction.php
 Router
 RouterDelegatorFactory.php
 templates
 application
 home-page.phtml
 public
 vendor
 composer.json
Nachher
 config
 data
 legacy
 module
 Application
 src
 Action
 HomePageAction.php
 ZF3TestAction.php
 Router
 RouterDelegatorFactory.php
 templates
 application
 home-page.phtml
 zf3-test.phtml
 public
 vendor
 composer.json
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3434 vonvon 5353
4. ZF3 Aktion testen4. ZF3 Aktion testen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3535 vonvon 5353
4. Design anpassen4. Design anpassen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3636 vonvon 5353
4. ZF1 Anwendung testen4. ZF1 Anwendung testen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3737 vonvon 5353
Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3838 vonvon 5353
Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht
ZF1 und ZF3 laufen parallel
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3939 vonvon 5353
Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht
ZF1 und ZF3 laufen parallel
Alte ZF1 Anwendung kann weiter gewartet werden
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4040 vonvon 5353
Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht
ZF1 und ZF3 laufen parallel
Alte ZF1 Anwendung kann weiter gewartet werden
Neue Features können in ZF3 implementiert werden
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4141 vonvon 5353
Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht
ZF1 und ZF3 laufen parallel
Alte ZF1 Anwendung kann weiter gewartet werden
Neue Features können in ZF3 implementiert werden
ZF1 und ZF3 nutzen dasselbe Design
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4242 vonvon 5353
5. Ressourcen & Plugins portieren5. Ressourcen & Plugins portieren
Controller
Plugins
Ressourcen
Konfiguration
Factories
Middleware
Pipeline
ZF1 ZF3
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4343 vonvon 5353
5. Ressourcen & Plugins portieren5. Ressourcen & Plugins portieren
Controller
Plugins
Ressourcen
Konfiguration
Factories
Middleware
Pipeline
ZF1 ZF3
Bootstrap
Datei
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4444 vonvon 5353
5. Ressourcen & Plugins portieren5. Ressourcen & Plugins portieren
Zend_ApplicationZend_Application Ressourcen nach ZF3 portierenRessourcen nach ZF3 portieren
Zend_ControllerZend_Controller Plugins nach ZF3 portierenPlugins nach ZF3 portieren
ZF1 Bootstrap Klasse nicht vergessenZF1 Bootstrap Klasse nicht vergessen
Portierung in Konfigurationsdateien und Middleware PipelinePortierung in Konfigurationsdateien und Middleware Pipeline
Beispiele: Config für Datenbanken, Caching, Mailsettings, etc.Beispiele: Config für Datenbanken, Caching, Mailsettings, etc.
Plugins: Authentifizierung, Autorisierung, Internationalisierung, etc.Plugins: Authentifizierung, Autorisierung, Internationalisierung, etc.
Anwendung lauffähig machenAnwendung lauffähig machen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4545 vonvon 5353
6. Aktionen migrieren6. Aktionen migrieren
Customer
Controller
Create
Customer
Action
Update
Customer
Action
Delete
Customer
Action
ZF1 ZF3
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4646 vonvon 5353
6. Aktionen migrieren6. Aktionen migrieren
Erst nur eine Controller Action migrierenErst nur eine Controller Action migrieren
Routing für Aktion in ZF3 Expressive definierenRouting für Aktion in ZF3 Expressive definieren
Action Middleware erstellen mit Code aus Controller ActionAction Middleware erstellen mit Code aus Controller Action
Template aus ZF1 Anwendung in ZF3 Anwendung schiebenTemplate aus ZF1 Anwendung in ZF3 Anwendung schieben
Aktion unter ZF3 lauffähig bekommen und ZF1 aufräumenAktion unter ZF3 lauffähig bekommen und ZF1 aufräumen
Mit allen anderen Aktionen fortfahrenMit allen anderen Aktionen fortfahren
Anwendung lauffähig machenAnwendung lauffähig machen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4747 vonvon 5353
7. ZF1 Komponenten migrieren7. ZF1 Komponenten migrieren
Zend_Form
Zend_Db
Zend
ServiceManager
ZendDb
ZendForm
ZF1 ZF3
Zend_Registry
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4848 vonvon 5353
7. ZF1 Komponenten migrieren7. ZF1 Komponenten migrieren
ZF1 Komponenten schrittweise durch ZF3 Komponenten austauschenZF1 Komponenten schrittweise durch ZF3 Komponenten austauschen
Zend_RegistryZend_Registry →→ ZendServiceManagerZendServiceManager (Dependency Injection)(Dependency Injection)
Zend_DbZend_Db →→ ZendDbZendDb (Modelklassen und Datenbankanbindung)(Modelklassen und Datenbankanbindung)
Zend_FormZend_Form →→ ZendFormZendForm (Formulare)(Formulare)
Alle weitere ZF1 Komponenten durch ZF3 Komponenten austauschenAlle weitere ZF1 Komponenten durch ZF3 Komponenten austauschen
Alte Legacy Anwendung komplett entfernenAlte Legacy Anwendung komplett entfernen
Anwendung lauffähig machenAnwendung lauffähig machen
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4949 vonvon 5353
Checkliste ZF1 MVC ZF3 MW→Checkliste ZF1 MVC ZF3 MW→
Legacy Anwendung in eigenes Verzeichnis schiebenLegacy Anwendung in eigenes Verzeichnis schieben
11
ZendExpressiveZendExpressive manuell installierenmanuell installieren
22
Middleware für Legacy Anwendung einrichtenMiddleware für Legacy Anwendung einrichten
33
Test-Aktion mit neuer Route einrichten und Design anpassenTest-Aktion mit neuer Route einrichten und Design anpassen
44
ZF1 Application Ressourcen & MVC Plugins zum ZF3 portierenZF1 Application Ressourcen & MVC Plugins zum ZF3 portieren
55
Controller-Aktionen zu Middleware-Aktionen migrierenController-Aktionen zu Middleware-Aktionen migrieren
66
Restliche ZF1 Komponenten migrierenRestliche ZF1 Komponenten migrieren
77
Bonus-Teil 4Bonus-Teil 4
Migration anderer Projekte zu ZF3 MiddlewareMigration anderer Projekte zu ZF3 Middleware
IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 5151 vonvon 5353
Checkliste Custom ZF3 MW→Checkliste Custom ZF3 MW→
Legacy Anwendung in eigenes Verzeichnis schiebenLegacy Anwendung in eigenes Verzeichnis schieben
11
ZendExpressiveZendExpressive manuell installierenmanuell installieren
22
Middleware für Legacy Anwendung einrichtenMiddleware für Legacy Anwendung einrichten
33
Test-Aktion mit neuer Route einrichten und Design anpassenTest-Aktion mit neuer Route einrichten und Design anpassen
44
Konfigurationen und »Objekte« portierenKonfigurationen und »Objekte« portieren
55
Seiten zu Middleware-Aktionen migrierenSeiten zu Middleware-Aktionen migrieren
66
Restliche Komponenten ersetzenRestliche Komponenten ersetzen
77
Fragen?Fragen?
Danke!Danke!
Mail: ralf@travello.deMail: ralf@travello.de
Web: www.zendframeworkschulung.deWeb: www.zendframeworkschulung.de

Contenu connexe

Tendances

9 Tipps für die Modernisierung von PHP-Anwendungen
9 Tipps für die Modernisierung von PHP-Anwendungen9 Tipps für die Modernisierung von PHP-Anwendungen
9 Tipps für die Modernisierung von PHP-AnwendungenRalf Eggert
 
Middleware Anwendungen mit dem Zend Framework 3
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Middleware Anwendungen mit dem Zend Framework 3Ralf Eggert
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.QAware GmbH
 
Effiziente Entwicklungsprozesse mit Git, EGit und Gerrit - Intland Technology...
Effiziente Entwicklungsprozesse mit Git, EGit und Gerrit - Intland Technology...Effiziente Entwicklungsprozesse mit Git, EGit und Gerrit - Intland Technology...
Effiziente Entwicklungsprozesse mit Git, EGit und Gerrit - Intland Technology...msohn
 
In den sicheren Hafen jax2020
In den sicheren Hafen jax2020In den sicheren Hafen jax2020
In den sicheren Hafen jax2020Stephan Kaps
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesQAware GmbH
 
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8sKontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8sQAware GmbH
 
Making the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUICMaking the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUICQAware GmbH
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionRobin Sedlaczek
 
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-UmfeldEnterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-UmfeldQAware GmbH
 
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-PipelinesContinuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-PipelinesTobias Schneck
 
Kubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container OrchestriererKubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container OrchestriererQAware GmbH
 
Entwicklertag Karlsruhe 2011
Entwicklertag Karlsruhe 2011Entwicklertag Karlsruhe 2011
Entwicklertag Karlsruhe 2011Stefan Lay
 
Eclipse, Git und Gerrit
Eclipse, Git und GerritEclipse, Git und Gerrit
Eclipse, Git und GerritStefan Lay
 
Dream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio ExtensionsDream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio ExtensionsRobin Sedlaczek
 
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...Robin Sedlaczek
 
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...QAware GmbH
 
#ADC 2016 - Roslyn & Visual Studio Extensions
#ADC 2016 - Roslyn & Visual Studio Extensions#ADC 2016 - Roslyn & Visual Studio Extensions
#ADC 2016 - Roslyn & Visual Studio ExtensionsRobin Sedlaczek
 

Tendances (20)

9 Tipps für die Modernisierung von PHP-Anwendungen
9 Tipps für die Modernisierung von PHP-Anwendungen9 Tipps für die Modernisierung von PHP-Anwendungen
9 Tipps für die Modernisierung von PHP-Anwendungen
 
Middleware Anwendungen mit dem Zend Framework 3
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Middleware Anwendungen mit dem Zend Framework 3
 
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.Steinzeit war gestern! Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Wege der Cloud-nativen Evolution.
 
Effiziente Entwicklungsprozesse mit Git, EGit und Gerrit - Intland Technology...
Effiziente Entwicklungsprozesse mit Git, EGit und Gerrit - Intland Technology...Effiziente Entwicklungsprozesse mit Git, EGit und Gerrit - Intland Technology...
Effiziente Entwicklungsprozesse mit Git, EGit und Gerrit - Intland Technology...
 
In den sicheren Hafen jax2020
In den sicheren Hafen jax2020In den sicheren Hafen jax2020
In den sicheren Hafen jax2020
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit Microservices
 
G&L Tech News 02/17
G&L Tech News 02/17G&L Tech News 02/17
G&L Tech News 02/17
 
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8sKontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
Kontinuierliches (Nicht)-Funktionales Testen von Microservices auf K8s
 
Making the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUICMaking the internet faster HTTP/3 und QUIC
Making the internet faster HTTP/3 und QUIC
 
BASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in ActionBASTA! Spring 2017 - C# Script in Action
BASTA! Spring 2017 - C# Script in Action
 
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-UmfeldEnterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
Enterprise CI/CD: Continuous Integration & Delivery im Enterprise-Umfeld
 
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-PipelinesContinuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
Continuous Testing: Integration- und UI-Testing mit OpenShift-Build-Pipelines
 
Gearconf 2011
Gearconf 2011Gearconf 2011
Gearconf 2011
 
Kubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container OrchestriererKubernetes ist so viel mehr als ein Container Orchestrierer
Kubernetes ist so viel mehr als ein Container Orchestrierer
 
Entwicklertag Karlsruhe 2011
Entwicklertag Karlsruhe 2011Entwicklertag Karlsruhe 2011
Entwicklertag Karlsruhe 2011
 
Eclipse, Git und Gerrit
Eclipse, Git und GerritEclipse, Git und Gerrit
Eclipse, Git und Gerrit
 
Dream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio ExtensionsDream-Team: Roslyn & Visual Studio Extensions
Dream-Team: Roslyn & Visual Studio Extensions
 
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
BASTA! Spring 2017 - Warum warten auf die IDE? Direct Coding in der eigenen A...
 
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
Cloud Native Migration: Wie IT-Landschaften ihren Weg auf eine Cloud-Native-P...
 
#ADC 2016 - Roslyn & Visual Studio Extensions
#ADC 2016 - Roslyn & Visual Studio Extensions#ADC 2016 - Roslyn & Visual Studio Extensions
#ADC 2016 - Roslyn & Visual Studio Extensions
 

Similaire à IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren

IPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive WorkshopIPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive WorkshopRalf Eggert
 
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam AugustinVerein FM Konferenz
 
Service oriented alerting
Service oriented alertingService oriented alerting
Service oriented alertinggeekQ
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrGunther Pippèrr
 
Testing TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatTesting TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatMarkus Goldbeck
 
BASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsBASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsRobin Sedlaczek
 
Günzel/Griesbaum -OpenShift und GitLab: Continuous delivery in der cloud
Günzel/Griesbaum -OpenShift und GitLab: Continuous delivery in der cloudGünzel/Griesbaum -OpenShift und GitLab: Continuous delivery in der cloud
Günzel/Griesbaum -OpenShift und GitLab: Continuous delivery in der cloudAndreas Günzel
 
Virtuelles CodeMoving mit Translocated Execution
Virtuelles CodeMoving mit Translocated ExecutionVirtuelles CodeMoving mit Translocated Execution
Virtuelles CodeMoving mit Translocated Executionteam-WIBU
 
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)Torben Knerr
 
FMK2014: Ein Warenwirtschaftssystem, das mit Scannern, Waagen und Mitarbeiter...
FMK2014: Ein Warenwirtschaftssystem, das mit Scannern, Waagen und Mitarbeiter...FMK2014: Ein Warenwirtschaftssystem, das mit Scannern, Waagen und Mitarbeiter...
FMK2014: Ein Warenwirtschaftssystem, das mit Scannern, Waagen und Mitarbeiter...Verein FM Konferenz
 
IoT Cloud2Cloud Connector
IoT Cloud2Cloud ConnectorIoT Cloud2Cloud Connector
IoT Cloud2Cloud ConnectorMark Teichmann
 
Citrix Day 2014: Panalpina - global und doch nah
Citrix Day 2014: Panalpina - global und doch nahCitrix Day 2014: Panalpina - global und doch nah
Citrix Day 2014: Panalpina - global und doch nahDigicomp Academy AG
 
APIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenAPIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenRalf Eggert
 
FMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
FMK2019 dot-Net-Plugin selbst programmieren by Werner StaubFMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
FMK2019 dot-Net-Plugin selbst programmieren by Werner StaubVerein FM Konferenz
 
Liebe Mobiliar, wie macht Ihr eigentlich DevOps?
Liebe Mobiliar, wie macht Ihr eigentlich DevOps?Liebe Mobiliar, wie macht Ihr eigentlich DevOps?
Liebe Mobiliar, wie macht Ihr eigentlich DevOps?Philipp Grossenbacher
 
Continuous Delivery in Oracle ADF Projekten
Continuous Delivery in Oracle ADF ProjektenContinuous Delivery in Oracle ADF Projekten
Continuous Delivery in Oracle ADF Projektenenpit GmbH & Co. KG
 
W-JAX 2013 Spring Batch - Performance und Skalierbarkeit
W-JAX 2013 Spring Batch - Performance und SkalierbarkeitW-JAX 2013 Spring Batch - Performance und Skalierbarkeit
W-JAX 2013 Spring Batch - Performance und Skalierbarkeittobiasflohre
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core ApplicationsRobin Sedlaczek
 

Similaire à IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren (20)

IPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive WorkshopIPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive Workshop
 
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam AugustinFMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
FMK2019 FileMaker Data API mit Node.js nutzen - Workshop by Adam Augustin
 
Service oriented alerting
Service oriented alertingService oriented alerting
Service oriented alerting
 
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperrOracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
Oracle oem 12c_plugin_development-doag-konferenz_11_2014_print_gunther_pipperr
 
Testing TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with BehatTesting TYPO3 Flow Applications with Behat
Testing TYPO3 Flow Applications with Behat
 
BASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio ExtensionsBASTA! 2016 - Roslyn & Visual Studio Extensions
BASTA! 2016 - Roslyn & Visual Studio Extensions
 
Continuous Delivery in ADF Projekten
Continuous Delivery in ADF ProjektenContinuous Delivery in ADF Projekten
Continuous Delivery in ADF Projekten
 
Günzel/Griesbaum -OpenShift und GitLab: Continuous delivery in der cloud
Günzel/Griesbaum -OpenShift und GitLab: Continuous delivery in der cloudGünzel/Griesbaum -OpenShift und GitLab: Continuous delivery in der cloud
Günzel/Griesbaum -OpenShift und GitLab: Continuous delivery in der cloud
 
Virtuelles CodeMoving mit Translocated Execution
Virtuelles CodeMoving mit Translocated ExecutionVirtuelles CodeMoving mit Translocated Execution
Virtuelles CodeMoving mit Translocated Execution
 
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
Automatisierte Entwickler VMs -- "works on my machine" zählt nicht mehr ;-)
 
FMK2014: Ein Warenwirtschaftssystem, das mit Scannern, Waagen und Mitarbeiter...
FMK2014: Ein Warenwirtschaftssystem, das mit Scannern, Waagen und Mitarbeiter...FMK2014: Ein Warenwirtschaftssystem, das mit Scannern, Waagen und Mitarbeiter...
FMK2014: Ein Warenwirtschaftssystem, das mit Scannern, Waagen und Mitarbeiter...
 
IoT Cloud2Cloud Connector
IoT Cloud2Cloud ConnectorIoT Cloud2Cloud Connector
IoT Cloud2Cloud Connector
 
Citrix Day 2014: Panalpina - global und doch nah
Citrix Day 2014: Panalpina - global und doch nahCitrix Day 2014: Panalpina - global und doch nah
Citrix Day 2014: Panalpina - global und doch nah
 
APIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellenAPIs mit Zend\Expressive erstellen
APIs mit Zend\Expressive erstellen
 
FMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
FMK2019 dot-Net-Plugin selbst programmieren by Werner StaubFMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
FMK2019 dot-Net-Plugin selbst programmieren by Werner Staub
 
Liebe Mobiliar, wie macht Ihr eigentlich DevOps?
Liebe Mobiliar, wie macht Ihr eigentlich DevOps?Liebe Mobiliar, wie macht Ihr eigentlich DevOps?
Liebe Mobiliar, wie macht Ihr eigentlich DevOps?
 
Continuous Delivery in Oracle ADF Projekten
Continuous Delivery in Oracle ADF ProjektenContinuous Delivery in Oracle ADF Projekten
Continuous Delivery in Oracle ADF Projekten
 
W-JAX 2013 Spring Batch - Performance und Skalierbarkeit
W-JAX 2013 Spring Batch - Performance und SkalierbarkeitW-JAX 2013 Spring Batch - Performance und Skalierbarkeit
W-JAX 2013 Spring Batch - Performance und Skalierbarkeit
 
PHPblue LOS!NRW
PHPblue LOS!NRWPHPblue LOS!NRW
PHPblue LOS!NRW
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 

Plus de Ralf Eggert

ChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heuteChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heuteRalf Eggert
 
Der ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionRalf Eggert
 
PHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickelnPHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickelnRalf Eggert
 
Alexa, what's next?
Alexa, what's next?Alexa, what's next?
Alexa, what's next?Ralf Eggert
 
Alexa, wohin geht die Reise
Alexa, wohin geht die ReiseAlexa, wohin geht die Reise
Alexa, wohin geht die ReiseRalf Eggert
 
8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface MeetupRalf Eggert
 
Alexa Skill Maintenance
Alexa Skill MaintenanceAlexa Skill Maintenance
Alexa Skill MaintenanceRalf Eggert
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu LaminasRalf Eggert
 
Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?Ralf Eggert
 
Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100Ralf Eggert
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu LaminasRalf Eggert
 
Alexa for Hospitality
Alexa for HospitalityAlexa for Hospitality
Alexa for HospitalityRalf Eggert
 
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Ralf Eggert
 
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenFortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenRalf Eggert
 
Die sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice ProjekteDie sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice ProjekteRalf Eggert
 
Künstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und WirklichkeitKünstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und WirklichkeitRalf Eggert
 
Multi-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon AlexaMulti-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon AlexaRalf Eggert
 
Mein Haus, mein Auto, mein Backend
Mein Haus, mein Auto, mein BackendMein Haus, mein Auto, mein Backend
Mein Haus, mein Auto, mein BackendRalf Eggert
 
Zend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationZend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationRalf Eggert
 

Plus de Ralf Eggert (20)

ChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heuteChatGPT: unser täglich' Bot gib uns heute
ChatGPT: unser täglich' Bot gib uns heute
 
Der ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 EditionDer ultimative PHP Framework Vergleich 2023 Edition
Der ultimative PHP Framework Vergleich 2023 Edition
 
PHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickelnPHP Module als Rundum-Sorglos-Pakete entwickeln
PHP Module als Rundum-Sorglos-Pakete entwickeln
 
Alexa, what's next?
Alexa, what's next?Alexa, what's next?
Alexa, what's next?
 
Alexa, wohin geht die Reise
Alexa, wohin geht die ReiseAlexa, wohin geht die Reise
Alexa, wohin geht die Reise
 
8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup
 
Welcome Bixby
Welcome BixbyWelcome Bixby
Welcome Bixby
 
Alexa Skill Maintenance
Alexa Skill MaintenanceAlexa Skill Maintenance
Alexa Skill Maintenance
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
 
Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?Alexa Skills und PHP? Passt das zusammen?
Alexa Skills und PHP? Passt das zusammen?
 
Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100Mit Jovo von 0 auf 100
Mit Jovo von 0 auf 100
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
 
Alexa for Hospitality
Alexa for HospitalityAlexa for Hospitality
Alexa for Hospitality
 
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...
 
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenFortgeschrittene Techniken für erfolgreiche Sprachanwendungen
Fortgeschrittene Techniken für erfolgreiche Sprachanwendungen
 
Die sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice ProjekteDie sieben Projektphasen für Voice Projekte
Die sieben Projektphasen für Voice Projekte
 
Künstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und WirklichkeitKünstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und Wirklichkeit
 
Multi-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon AlexaMulti-Modal Voice Development with Amazon Alexa
Multi-Modal Voice Development with Amazon Alexa
 
Mein Haus, mein Auto, mein Backend
Mein Haus, mein Auto, mein BackendMein Haus, mein Auto, mein Backend
Mein Haus, mein Auto, mein Backend
 
Zend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next GenerationZend/Expressive 3 – The Next Generation
Zend/Expressive 3 – The Next Generation
 

IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren

  • 1. Legacy Anwendungen mitLegacy Anwendungen mit ZendExpressive modernisierenZendExpressive modernisieren
  • 2. Ralf EggertRalf Eggert CEO Travello GmbH, ZF Trainer, Autor, Coach,CEO Travello GmbH, ZF Trainer, Autor, Coach, PHP Entwickler & Alexa Skill EntwicklerPHP Entwickler & Alexa Skill Entwickler
  • 4. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 44 vonvon 5353 AgendaAgenda Teil 1: Überblick ZendExpressiveTeil 1: Überblick ZendExpressive Teil 2: Vorbereitungen für MigrationTeil 2: Vorbereitungen für Migration Teil 3: Migration vom ZF1 MVC zu ZF3 MiddlewareTeil 3: Migration vom ZF1 MVC zu ZF3 Middleware Bonus-Teil 4: Migration anderer Projekte zu ZF3 MiddlewareBonus-Teil 4: Migration anderer Projekte zu ZF3 Middleware
  • 5. Teil 1Teil 1 Überblick ZendExpressiveÜberblick ZendExpressive
  • 6. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 66 vonvon 5353 Zend Framework 3Zend Framework 3 Ich bin zwei Öltanks FRAMEWORKS FRAMEWORKS
  • 7. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 77 vonvon 5353 Was ist der PSR-7?Was ist der PSR-7?
  • 8. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 88 vonvon 5353 Was istWas ist derder PSR-15?PSR-15?
  • 9. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 99 vonvon 5353 Zend Framework KomponentenZend Framework Komponenten ZEND DIACTOROS ZENDSTRATIGILITY ZENDEXPRESSIVE HTTP MESSAGES /PSR-7 MIDDLEWARE / PSR-15 MIDDLEWARE APPLICATIONS
  • 10. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1010 vonvon 5353 ZendExpressiveZendExpressive KomponentenKomponenten Router DI Container Template Renderer Error Handler Aura.Router FastRoute ZendRouter Weitere Router Aura.DI Pimple-interop Zend ServiceManager Weitere DI Container Plates Twig ZendView Weitere Template-Engines Whoops Weitere Error-Handler
  • 11. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1111 vonvon 5353 Klassischer HTTP RequestKlassischer HTTP Request CLIENT WEBSERVER HTTP REQUEST HTTP RESPONSE
  • 12. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1212 vonvon 5353 Middleware-RequestMiddleware-Request HTTP Request HTTP Response Middleware-Pipeline
  • 13. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1313 vonvon 5353 Middleware-PipelineMiddleware-Pipeline HTTP Request HTTP Response Routing Middleware Authorization Middleware Dispatching Middleware
  • 14. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1414 vonvon 5353 Middleware-AktionenMiddleware-Aktionen HTTP Request HTTP Response Routing Middleware Action Middleware Authorization Middleware Dispatching Middleware
  • 15. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1515 vonvon 5353 Beispiele für Action-MiddlewareBeispiele für Action-Middleware
  • 16. Teil 2Teil 2 Vorbereitungen für MigrationVorbereitungen für Migration
  • 17. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1717 vonvon 5353 1. Eigener Branch für Migration1. Eigener Branch für Migration
  • 18. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1818 vonvon 5353 2. Upgrade auf neuestes PHP 72. Upgrade auf neuestes PHP 7
  • 19. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 1919 vonvon 5353 3. Composer installieren3. Composer installieren
  • 20. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2020 vonvon 5353 4. Autoloading nur per Composer4. Autoloading nur per Composer
  • 21. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2121 vonvon 5353 5. Alle Pakete (!) per Composer5. Alle Pakete (!) per Composer
  • 22. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2222 vonvon 5353 6. Anwendung lauffähig machen6. Anwendung lauffähig machen
  • 23. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2323 vonvon 5353 7. Expressive separat installieren7. Expressive separat installieren
  • 24. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2424 vonvon 5353 Checkliste VorbereitungenCheckliste Vorbereitungen Eigenen Branch für Migration einrichtenEigenen Branch für Migration einrichten 11 Upgrade auf PHP 7Upgrade auf PHP 7 22 Composer installieren (falls noch nicht geschehen)Composer installieren (falls noch nicht geschehen) 33 Autoloading ausschließlich über Composer einrichtenAutoloading ausschließlich über Composer einrichten 44 Alle Pakete und Abhängigkeiten per Composer installierenAlle Pakete und Abhängigkeiten per Composer installieren 55 Anwendung lauffähig machenAnwendung lauffähig machen 66 Expressive Skeleton in separatem Verzeichnis installierenExpressive Skeleton in separatem Verzeichnis installieren 77
  • 25. Teil 3Teil 3 Migration vom ZF1 MVC zu ZF3 MiddlewareMigration vom ZF1 MVC zu ZF3 Middleware
  • 26. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2626 vonvon 5353 1. Eigenes Legacy Verzeichnis1. Eigenes Legacy Verzeichnis Vorher  application  controllers  forms  models  views  Bootstrap.php  data  cache  library  Custom  public  css  img  index.php  vendor  zendframework  composer.json Nachher  data  cache  legacy  application  controllers  forms  models  views  Bootstrap.php  library  Custom  public  css  img  index.php  vendor  zendframework  composer.json
  • 27. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2727 vonvon 5353 2. ZendExpressive installieren2. ZendExpressive installieren Vorher  data  cache  legacy  application  library  public  css  img  index.php  vendor  composer.json Nachher  config  autoload  config.php  container.php  data  cache  legacy  application  library  module  Application  public  css  img  index.php.bak (ZF1)  index.php (ZF3)  vendor  composer.json
  • 28. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2828 vonvon 5353 2. ZendExpressive testen2. ZendExpressive testen
  • 29. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 2929 vonvon 5353 3. Legacy Application Middleware3. Legacy Application Middleware namespace LegacyMiddleware; use InteropHttpServerMiddlewareDelegateInterface; use InteropHttpServerMiddlewareMiddlewareInterface; use PsrHttpMessageServerRequestInterface; use ZendDiactorosResponseHtmlResponse; use ZendExpressiveRouterRouteResult; class LegacyApplicationMiddleware implements MiddlewareInterface { public function process(ServerRequestInterface $request, DelegateInterface $delegate) { $result = $request->getAttribute(RouteResult::class, false); if ($result instanceof RouteResult) { return $delegate->process($request); } ob_start(); $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap(); $application->run(); $output = ob_get_contents(); ob_end_clean(); return new HtmlResponse($output); } }
  • 30. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3030 vonvon 5353 3. ZF3 Startseite testen3. ZF3 Startseite testen
  • 31. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3131 vonvon 5353 3. ZF1 Anwendung testen3. ZF1 Anwendung testen
  • 32. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3232 vonvon 5353 3. ZF3 Home Route ausblenden3. ZF3 Home Route ausblenden
  • 33. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3333 vonvon 5353 4. Neue Test-Aktion4. Neue Test-Aktion Vorher  config  data  legacy  module  Application  src  Action  HomePageAction.php  Router  RouterDelegatorFactory.php  templates  application  home-page.phtml  public  vendor  composer.json Nachher  config  data  legacy  module  Application  src  Action  HomePageAction.php  ZF3TestAction.php  Router  RouterDelegatorFactory.php  templates  application  home-page.phtml  zf3-test.phtml  public  vendor  composer.json
  • 34. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3434 vonvon 5353 4. ZF3 Aktion testen4. ZF3 Aktion testen
  • 35. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3535 vonvon 5353 4. Design anpassen4. Design anpassen
  • 36. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3636 vonvon 5353 4. ZF1 Anwendung testen4. ZF1 Anwendung testen
  • 37. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3737 vonvon 5353 Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht
  • 38. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3838 vonvon 5353 Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht ZF1 und ZF3 laufen parallel
  • 39. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 3939 vonvon 5353 Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht ZF1 und ZF3 laufen parallel Alte ZF1 Anwendung kann weiter gewartet werden
  • 40. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4040 vonvon 5353 Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht ZF1 und ZF3 laufen parallel Alte ZF1 Anwendung kann weiter gewartet werden Neue Features können in ZF3 implementiert werden
  • 41. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4141 vonvon 5353 Wichtiger Meilenstein erreichtWichtiger Meilenstein erreicht ZF1 und ZF3 laufen parallel Alte ZF1 Anwendung kann weiter gewartet werden Neue Features können in ZF3 implementiert werden ZF1 und ZF3 nutzen dasselbe Design
  • 42. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4242 vonvon 5353 5. Ressourcen & Plugins portieren5. Ressourcen & Plugins portieren Controller Plugins Ressourcen Konfiguration Factories Middleware Pipeline ZF1 ZF3
  • 43. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4343 vonvon 5353 5. Ressourcen & Plugins portieren5. Ressourcen & Plugins portieren Controller Plugins Ressourcen Konfiguration Factories Middleware Pipeline ZF1 ZF3 Bootstrap Datei
  • 44. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4444 vonvon 5353 5. Ressourcen & Plugins portieren5. Ressourcen & Plugins portieren Zend_ApplicationZend_Application Ressourcen nach ZF3 portierenRessourcen nach ZF3 portieren Zend_ControllerZend_Controller Plugins nach ZF3 portierenPlugins nach ZF3 portieren ZF1 Bootstrap Klasse nicht vergessenZF1 Bootstrap Klasse nicht vergessen Portierung in Konfigurationsdateien und Middleware PipelinePortierung in Konfigurationsdateien und Middleware Pipeline Beispiele: Config für Datenbanken, Caching, Mailsettings, etc.Beispiele: Config für Datenbanken, Caching, Mailsettings, etc. Plugins: Authentifizierung, Autorisierung, Internationalisierung, etc.Plugins: Authentifizierung, Autorisierung, Internationalisierung, etc. Anwendung lauffähig machenAnwendung lauffähig machen
  • 45. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4545 vonvon 5353 6. Aktionen migrieren6. Aktionen migrieren Customer Controller Create Customer Action Update Customer Action Delete Customer Action ZF1 ZF3
  • 46. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4646 vonvon 5353 6. Aktionen migrieren6. Aktionen migrieren Erst nur eine Controller Action migrierenErst nur eine Controller Action migrieren Routing für Aktion in ZF3 Expressive definierenRouting für Aktion in ZF3 Expressive definieren Action Middleware erstellen mit Code aus Controller ActionAction Middleware erstellen mit Code aus Controller Action Template aus ZF1 Anwendung in ZF3 Anwendung schiebenTemplate aus ZF1 Anwendung in ZF3 Anwendung schieben Aktion unter ZF3 lauffähig bekommen und ZF1 aufräumenAktion unter ZF3 lauffähig bekommen und ZF1 aufräumen Mit allen anderen Aktionen fortfahrenMit allen anderen Aktionen fortfahren Anwendung lauffähig machenAnwendung lauffähig machen
  • 47. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4747 vonvon 5353 7. ZF1 Komponenten migrieren7. ZF1 Komponenten migrieren Zend_Form Zend_Db Zend ServiceManager ZendDb ZendForm ZF1 ZF3 Zend_Registry
  • 48. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4848 vonvon 5353 7. ZF1 Komponenten migrieren7. ZF1 Komponenten migrieren ZF1 Komponenten schrittweise durch ZF3 Komponenten austauschenZF1 Komponenten schrittweise durch ZF3 Komponenten austauschen Zend_RegistryZend_Registry →→ ZendServiceManagerZendServiceManager (Dependency Injection)(Dependency Injection) Zend_DbZend_Db →→ ZendDbZendDb (Modelklassen und Datenbankanbindung)(Modelklassen und Datenbankanbindung) Zend_FormZend_Form →→ ZendFormZendForm (Formulare)(Formulare) Alle weitere ZF1 Komponenten durch ZF3 Komponenten austauschenAlle weitere ZF1 Komponenten durch ZF3 Komponenten austauschen Alte Legacy Anwendung komplett entfernenAlte Legacy Anwendung komplett entfernen Anwendung lauffähig machenAnwendung lauffähig machen
  • 49. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 4949 vonvon 5353 Checkliste ZF1 MVC ZF3 MW→Checkliste ZF1 MVC ZF3 MW→ Legacy Anwendung in eigenes Verzeichnis schiebenLegacy Anwendung in eigenes Verzeichnis schieben 11 ZendExpressiveZendExpressive manuell installierenmanuell installieren 22 Middleware für Legacy Anwendung einrichtenMiddleware für Legacy Anwendung einrichten 33 Test-Aktion mit neuer Route einrichten und Design anpassenTest-Aktion mit neuer Route einrichten und Design anpassen 44 ZF1 Application Ressourcen & MVC Plugins zum ZF3 portierenZF1 Application Ressourcen & MVC Plugins zum ZF3 portieren 55 Controller-Aktionen zu Middleware-Aktionen migrierenController-Aktionen zu Middleware-Aktionen migrieren 66 Restliche ZF1 Komponenten migrierenRestliche ZF1 Komponenten migrieren 77
  • 50. Bonus-Teil 4Bonus-Teil 4 Migration anderer Projekte zu ZF3 MiddlewareMigration anderer Projekte zu ZF3 Middleware
  • 51. IPC 2017 MünchenIPC 2017 MünchenRalf EggertRalf Eggert 5151 vonvon 5353 Checkliste Custom ZF3 MW→Checkliste Custom ZF3 MW→ Legacy Anwendung in eigenes Verzeichnis schiebenLegacy Anwendung in eigenes Verzeichnis schieben 11 ZendExpressiveZendExpressive manuell installierenmanuell installieren 22 Middleware für Legacy Anwendung einrichtenMiddleware für Legacy Anwendung einrichten 33 Test-Aktion mit neuer Route einrichten und Design anpassenTest-Aktion mit neuer Route einrichten und Design anpassen 44 Konfigurationen und »Objekte« portierenKonfigurationen und »Objekte« portieren 55 Seiten zu Middleware-Aktionen migrierenSeiten zu Middleware-Aktionen migrieren 66 Restliche Komponenten ersetzenRestliche Komponenten ersetzen 77
  • 53. Danke!Danke! Mail: ralf@travello.deMail: ralf@travello.de Web: www.zendframeworkschulung.deWeb: www.zendframeworkschulung.de