SlideShare ist ein Scribd-Unternehmen logo
WebinarWebinar
Migration zum Zend Framework 3Migration zum Zend Framework 3
Ralf EggertRalf Eggert
CEO Travello GmbH, PHP Entwickler,CEO Travello GmbH, PHP Entwickler,
Zend Framework Trainer, Autor & Coach sowieZend Framework Trainer, Autor & Coach sowie
Amazon Alexa Skill EntwicklerAmazon Alexa Skill Entwickler
Ralf EggertRalf Eggert 33 vonvon 6868
Agenda
Teil 1: Neuerungen im Zend Framework 3
Teil 2: Überblick ZendExpressive
Teil 3: Vorbereitungen für Migration
Teil 4: Migration vom ZF1 MVC zu ZF3 Middleware
Teil 5: Migration vom ZF2 MVC zu ZF3 MVC
Teil 6: Migration vom ZF3 MVC zu ZF3 Middleware
Teil 1Teil 1
Neuerungen im Zend Framework 3Neuerungen im Zend Framework 3
Ralf EggertRalf Eggert 55 vonvon 6868
Fakten zum ZF3
ZF1 Support
endete 09/2016
PHP 7
kompatibel
ZF2 LTS
bis 03/2018
PHP 5.6
vorausgesetzt
Über 160 Mio.
installierte
Pakete
ZF3 erschienen
im 07/2016
Über 60
Komponenten
Ralf EggertRalf Eggert 66 vonvon 6868
Auswahl Komponenten
MVC
Formulare
Middleware
Input-Filter
Validatoren
View
Filter
Authentifizierung
Autorisierung Cache
Session
Konfiguration
Datenbanken
Dateien
Service-Manager
Event-Manager Modul-Manager
Hydrator
Ralf EggertRalf Eggert 77 vonvon 6868
Framework Silos 2006 - 2015
Ralf EggertRalf Eggert 88 vonvon 6868
Ende Framework Silos seit 2016
Ralf EggertRalf Eggert 99 vonvon 6868
Performance Optimierungen
Zend Framework 2 Zend Framework 34x schneller
Ralf EggertRalf Eggert 1010 vonvon 6868
Standardisierung: www.php-fig.org
Ralf EggertRalf Eggert 1111 vonvon 6868
Verbesserte Dokumentation
Ralf EggertRalf Eggert 1212 vonvon 6868
Entkopplung der Komponenten
ZendMvc 2.5
4 feste Abhängigkeiten, z.B. zu
ZendForm
19 optionale Abhängigkeiten,
z.B. zu ZendI18n oder
ZendAuthentication
0 Integrationskomponenten
0 Plugin-Komponenten
ZendMvc 3.0
7 feste Abhängigkeiten, z.B. zu
ZendServiceManager
9 optionale Abhängigkeiten,
z.B. zu ZendMvcI18n oder
ZendMvcPluginIdentity
2 Integrationskomponenten
4 Plugin-Komponenten
Ralf EggertRalf Eggert 1313 vonvon 6868
Kontinuität & Community
Ralf EggertRalf Eggert 1414 vonvon 6868
Migration Guide
Ralf EggertRalf Eggert 1515 vonvon 6868
Diversifikation
Ich bin zwei
Öltanks
FRAMEWORKS
Ralf EggertRalf Eggert 1616 vonvon 6868
Middleware vs. MVC
ZendMvcZendExpressive
Neues
Konzept
Wenige
Module
Middleware
Pipeline
Schwerere
Integration
unerfahrene
Entwickler
Neue
Projekte
Migration
komplexer
sehr
performant
erprobt
& stabil
viele
Module
Migration
einfach
Leichte
Integration
erfahrene
Entwickler
Event
Manager
Bestands-
projekte
weniger
performant
Zukunft Gegenwart
Ralf EggertRalf Eggert 1717 vonvon 6868
Entscheidungsmatrix für Migration
Projektlaufzeit
Kurzfristig
(wenige Monate)
Projektlaufzeit
Mittelfristig
(einige Jahre)
Projektlaufzeit
Langfristig
(mehrere Jahre)
Projektbasis
Zend Framework 2
Upgrade auf die neuesten
ZF2 Komponenten
Upgrade auf ZF3 MVC Upgrade auf ZF3
Middleware
Projektbasis
Zend Framework 1
Upgrade auf die neueste
ZF1 Version und Daumen
drücken
Upgrade auf ZF3
Middleware
(übergangsweise
Parallelbetrieb mit ZF1)
Upgrade auf ZF3
Middleware
(übergangsweise
Parallelbetrieb mit ZF1)
Projektbasis
Kein Zend Framework
Daumen drücken Upgrade auf ZF3
Middleware
(übergangsweise
Parallelbetrieb mit Legacy
Anwendung)
Upgrade auf ZF3
Middleware
(übergangsweise
Parallelbetrieb mit Legacy
Anwendung)
Fragen?Fragen?
Teil 2Teil 2
Überblick ZendExpressiveÜberblick ZendExpressive
Ralf EggertRalf Eggert 2020 vonvon 6868
Was ist der PSR-7?
Ralf EggertRalf Eggert 2121 vonvon 6868
Was ist der PSR-15?
Ralf EggertRalf Eggert 2222 vonvon 6868
Zend Framework Komponenten
ZEND
DIACTOROS
ZENDSTRATIGILITY
ZENDEXPRESSIVE
HTTP MESSAGES /PSR-7
MIDDLEWARE / PSR-15
MIDDLEWARE
APPLICATIONS
Ralf EggertRalf Eggert 2323 vonvon 6868
ZendExpressive Komponenten
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
Ralf EggertRalf Eggert 2424 vonvon 6868
Klassischer HTTP Request
CLIENT WEBSERVER
HTTP
REQUEST
HTTP
RESPONSE
Ralf EggertRalf Eggert 2525 vonvon 6868
Middleware-Request
HTTP
Request
HTTP
Response
Middleware-Pipeline
Ralf EggertRalf Eggert 2626 vonvon 6868
Middleware-Pipeline
HTTP
Request
HTTP
Response
Routing
Middleware
Authorization
Middleware
Dispatching
Middleware
Ralf EggertRalf Eggert 2727 vonvon 6868
Middleware-Aktionen
HTTP
Request
HTTP
Response
Routing
Middleware
Action
Middleware
Authorization
Middleware
Dispatching
Middleware
Ralf EggertRalf Eggert 2828 vonvon 6868
Beispiele für Action-Middleware
Fragen?Fragen?
Teil 3Teil 3
Vorbereitungen für MigrationVorbereitungen für Migration
Ralf EggertRalf Eggert 3131 vonvon 6868
1. Eigener Branch für Migration
Ralf EggertRalf Eggert 3232 vonvon 6868
2. Upgrade auf PHP 7
Ralf EggertRalf Eggert 3333 vonvon 6868
3. Composer installieren
Ralf EggertRalf Eggert 3434 vonvon 6868
4. Autoloading nur per Composer
Ralf EggertRalf Eggert 3535 vonvon 6868
5. Alle Pakete (!) per Composer
Ralf EggertRalf Eggert 3636 vonvon 6868
6. Anwendung lauffähig machen
Ralf EggertRalf Eggert 3737 vonvon 6868
7. Expressive Skeleton installieren
Ralf EggertRalf Eggert 3838 vonvon 6868
Checkliste Vorbereitungen
Eigenen Branch für Migration einrichten1
Upgrade auf PHP 72
Composer installieren (falls noch nicht geschehen)3
Autoloading ausschließlich über Composer einrichten4
Alle Pakete und Abhängigkeiten per Composer installieren5
Anwendung lauffähig machen6
Expressive Skeleton in separatem Verzeichnis installieren7
Fragen?Fragen?
Teil 4Teil 4
Migration vom ZF1 MVC zu ZF3 MiddlewareMigration vom ZF1 MVC zu ZF3 Middleware
Ralf EggertRalf Eggert 4141 vonvon 6868
Migration ZF1 MVC ZF3 MW→
Legacy Anwendung in eigenes Verzeichnis schieben1
ZendExpressive manuell installieren2
Middleware für Legacy Anwendung einrichten3
Test-Aktion mit neuer Route einrichten und Design anpassen4
ZF1 Application Ressourcen & MVC Plugins zum ZF3 portieren5
Controller-Aktionen zu Middleware-Aktionen migrieren6
Restliche ZF1 Komponenten ersetzen7
Ralf EggertRalf Eggert 4242 vonvon 6868
1. Eigenes Legacy Verzeichnis
Verzeichnis /legacy im Projekt erstellen
Nur /application und /library nach /legacy verschieben
Assets wie Grafiken, JS, CSS nicht verschieben
Verzeichnis /data und /tmp nicht verschieben
Verzeichnis /vendor nicht verschieben
Autoloading anpassen (Composer)
Anwendung zum Laufen bekommen
Ralf EggertRalf Eggert 4343 vonvon 6868
2. ZendExpressive installieren
Verzeichnis der Skeleton Application aus Vorbereitungen öffnen
Alle Pakete aus composer.json mit Composer installieren
Verzeichnis /config übernehmen und anpassen
Verzeichnis /module übernehmen mit Application Modul
Vorhandene /public/index.php in /public/index.bak.php umbenennen
/public/index.php aus Skeleton Application übernehmen
Skeleton Application zum Laufen bekommen
Ralf EggertRalf Eggert 4444 vonvon 6868
3. Legacy Application Middleware
Middleware für Legacy Application in Pipeline integrieren
Middleware leitet bei erfolgreichem ZF3 Routing weiter
Andernfalls führt Middleware die ZF1 Legacy Anwendung aus
Beispiele
Startseite für ZF3 und restliche Seiten für ZF1 testen
ZF3 Startseite entfernen und ZF1 Startseite testen
Anwendung lauffähig machen
Ralf EggertRalf Eggert 4545 vonvon 6868
Legacy ZF1 Front-Controller
<?php
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../legacy/application'));
define('PROJECT_PATH', realpath(dirname(__FILE__) . '/..'));
$hostParts = explode('.', $_SERVER['HTTP_HOST']);
switch ($hostParts[0]) {
case 'dev':
define('APPLICATION_ENV', 'development');
break;
case 'mobile':
define('APPLICATION_ENV', 'mobile');
break;
case 'www':
default:
define('APPLICATION_ENV', 'production');
break;
}
require_once PROJECT_PATH . '/vendor/autoload.php';
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap();
$application->run();
Ralf EggertRalf Eggert 4646 vonvon 6868
Expressive ZF3 Front-Controller
<?php
use InteropContainerContainerInterface;
use ZendExpressiveApplication;
define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../legacy/application'));
define('PROJECT_PATH', realpath(dirname(__FILE__) . '/..'));
$hostParts = explode('.', $_SERVER['HTTP_HOST']);
switch ($hostParts[0]) {
case 'dev':
define('APPLICATION_ENV', 'development');
break;
case 'www':
default:
define('APPLICATION_ENV', 'production');
break;
}
require_once PROJECT_PATH . '/vendor/autoload.php';
/** @var ContainerInterface $container */
$container = require PROJECT_PATH . '/config/container.php';
/** @var Application $application */
$application = $container->get(Application::class);
$application->run();
Ralf EggertRalf Eggert 4747 vonvon 6868
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);
}
}
Ralf EggertRalf Eggert 4848 vonvon 6868
4. Neue Test-Aktion & Design
Neue Test-Aktion anlegen (darf in Legacy Anwendung nicht existieren)
Eigene Route, eigene Middleware & eigenes Template
Layout der ZF3 Anwendung an ZF1 Anwendung anpassen
Ggf. weitere Anpassungen für korrekte Darstellung vornehmen
Neue Test-Aktion in ZF3 Expressive lauffähig machen
Sicherstellen, dass ZF1 Legacy weiterhin lauffähig ist
Anwendung lauffähig machen
Ralf EggertRalf Eggert 4949 vonvon 6868
5. Ressourcen & Plugins portieren
Zend_Application Ressourcen nach ZF3 portieren
Zend_Controller Plugins nach ZF3 portieren
ZF1 Bootstrap Klasse nicht vergessen
Portierung in Konfigurationsdateien und Middleware Pipeline
Beispiele: Config für Datenbanken, Caching, Mailsettings, etc.
Plugins: Authentifizierung, Autorisierung, Internationalisierung, etc.
Anwendung lauffähig machen
Ralf EggertRalf Eggert 5050 vonvon 6868
6. Aktionen migrieren
Erst nur eine Controller Action migrieren
Routing für Aktion in ZF3 Expressive definieren
Action Middleware erstellen mit Code aus Controller Action
Template aus ZF1 Anwendung in ZF3 Anwendung schieben
Aktion unter ZF3 lauffähig bekommen und ZF1 aufräumen
Mit allen anderen Aktionen fortfahren
Anwendung lauffähig machen
Ralf EggertRalf Eggert 5151 vonvon 6868
7. ZF1 Komponenten ersetzen
ZF1 Komponenten schrittweise durch ZF3 Komponenten austauschen
Zend_Registry → ZendServiceManager (Dependency Injection)
Zend_Db → ZendDb (Modelklassen und Datenbankanbindung)
Zend_Form → ZendForm (Formulare)
Alle weitere ZF1 Komponenten durch ZF3 Komponenten austauschen
Alte Legacy Anwendung komplett entfernen
Anwendung lauffähig machen
Fragen?Fragen?
Teil 5Teil 5
Migration vom ZF2 MVC zu ZF3 MVCMigration vom ZF2 MVC zu ZF3 MVC
Ralf EggertRalf Eggert 5454 vonvon 6868
Migration ZF2 MVC ZF3 MVC→
Zend Framework Meta-Package entfernen1
ZF3 Service Manager installieren2
ZF3 Event Manager installieren3
ZF3 Mvc installieren4
Weitere ZF3 Komponenten installieren5
Ralf EggertRalf Eggert 5555 vonvon 6868
1. Meta-Package entfernen
Zend Framework Meta-Package aus composer.json entfernen
Zend Component Installer installieren
Aktuellste ZF2 Komponenten installieren
Anwendung lauffähig machen
Ralf EggertRalf Eggert 5656 vonvon 6868
2. ZF3 Service Manager installieren
ZendServiceManager 3 installieren
In Controllern alle Abhängigkeiten injizieren
ServiceLocatorAwareInterface entfernen
Invokables → InvokableFactory
Service Identifier mit Klassennamen statt String
Migration Guide beachten
Anwendung lauffähig machen
Ralf EggertRalf Eggert 5757 vonvon 6868
3. ZF3 Event Manager installieren
ZendEventManager 3 installieren
Migration abhängig vom Einsatz im Projekt
Vereinfachte API in trigger() Methoden
Entfernte Interfaces und Methoden beachten
Migration Guide beachten
Anwendung lauffähig machen
Ralf EggertRalf Eggert 5858 vonvon 6868
4. ZF3 MVC installieren
Controller anpassen (siehe Service Manager)
Jeder Controller braucht (in der Regel) eine Factory
Integrationskomponenten beachten (Konsole, I18n, Plugins, etc.)
Migration Guide beachten
Anwendung lauffähig machen
ZendMvc 3 installieren
Ralf EggertRalf Eggert 5959 vonvon 6868
5. Weitere ZF3 Komponenten
ZendStdlib 3 installieren
ZendConfig 3 installieren
ZendTest 3 installieren
ZendCode 3 installieren
ZendCrypt 3 installieren
ZendJson 3 installieren
ZendMath 3 installieren
Fragen?Fragen?
Teil 6Teil 6
Migration vom ZF3 MVC zu ZF3 MiddlewareMigration vom ZF3 MVC zu ZF3 Middleware
Ralf EggertRalf Eggert 6262 vonvon 6868
Migration ZF3 MVC ZF3 MW→
ZendExpressive manuell installieren1
Module migrieren2
MVC Event Listener Middleware Pipeline→3
Projekt aufräumen4
Ralf EggertRalf Eggert 6363 vonvon 6868
1. ZendExpressive installieren
Verzeichnis der Skeleton Application aus Vorbereitungen öffnen
Composer-Konfiguration für ZendExpressive übernehmen
Anwendungskonfiguration übernehmen
Front-Controller anpassen
App Modul aus Skeleton übernehmen und Testen
Ralf EggertRalf Eggert 6464 vonvon 6868
2. Module migrieren
Config Provider anlegen
Konfiguration migrieren
Routen migrieren
Controller Aktionen Action Middleware migrieren→
Templates migrieren
Für alle Module wieder holen
Ralf EggertRalf Eggert 6565 vonvon 6868
3. MVC Event Listener migrieren
MVC Event Listener identifizieren
Für jeden MVC Event Listener eine eigene Middleware erstellen
Neue Middleware in Pipeline übernehmen
Beispiel: Authentifizierung, Autorisierung, Internationalisierung, etc.
Ralf EggertRalf Eggert 6666 vonvon 6868
4. Projekt aufräumen
ZendMvc deinstallieren
Alle alten MVC Bestandteile entfernen
Anwendung lauffähig machen
Fragen?Fragen?
Danke!Danke!
Fragen an ralf@travello.deFragen an ralf@travello.de

Weitere ähnliche Inhalte

Was ist angesagt?

Per Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API GatewaysPer Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API Gateways
QAware GmbH
 
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
Gunther Pippèrr
 
IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
IPC 2017 - Legacy-Anwendungen mit Expressive modernisierenIPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
Ralf Eggert
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
Steffen Gebert
 
DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes
QAware GmbH
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3
Peter Kraume
 
Trivadis TechEvent 2016 Ablösung einer Tivoli Monitoring Umgebung mit OpenSou...
Trivadis TechEvent 2016 Ablösung einer Tivoli Monitoring Umgebung mit OpenSou...Trivadis TechEvent 2016 Ablösung einer Tivoli Monitoring Umgebung mit OpenSou...
Trivadis TechEvent 2016 Ablösung einer Tivoli Monitoring Umgebung mit OpenSou...
Trivadis
 
Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...
Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...
Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...
Trivadis
 
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
QAware GmbH
 
Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...
Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...
Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...
Alex Sili
 
Dev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei TechnosoftDev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei Technosoft
Bart Zwager
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
enpit GmbH & Co. KG
 
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)
Ralf Eggert
 
PHP Deployment mit Ansible
PHP Deployment mit AnsiblePHP Deployment mit Ansible
PHP Deployment mit Ansible
Michael Döhler
 
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
Tobias Schneck
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!
Tobias Schneck
 
Mit LoRaWAN und Serverless zur eigenen Smart-Office-Lösung
Mit LoRaWAN und Serverless zur eigenen Smart-Office-LösungMit LoRaWAN und Serverless zur eigenen Smart-Office-Lösung
Mit LoRaWAN und Serverless zur eigenen Smart-Office-Lösung
QAware GmbH
 
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
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue Normal
QAware GmbH
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
QAware GmbH
 

Was ist angesagt? (20)

Per Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API GatewaysPer Anhalter zu Cloud-nativen API Gateways
Per Anhalter zu Cloud-nativen API Gateways
 
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
 
IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
IPC 2017 - Legacy-Anwendungen mit Expressive modernisierenIPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
IPC 2017 - Legacy-Anwendungen mit Expressive modernisieren
 
Continuous Delivery
Continuous DeliveryContinuous Delivery
Continuous Delivery
 
DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes DevOps Prinzipien im Zusammenspiel mit Kubernetes
DevOps Prinzipien im Zusammenspiel mit Kubernetes
 
Composer und TYPO3
Composer und TYPO3Composer und TYPO3
Composer und TYPO3
 
Trivadis TechEvent 2016 Ablösung einer Tivoli Monitoring Umgebung mit OpenSou...
Trivadis TechEvent 2016 Ablösung einer Tivoli Monitoring Umgebung mit OpenSou...Trivadis TechEvent 2016 Ablösung einer Tivoli Monitoring Umgebung mit OpenSou...
Trivadis TechEvent 2016 Ablösung einer Tivoli Monitoring Umgebung mit OpenSou...
 
Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...
Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...
Trivadis TechEvent 2016 A few thoughts on the subject Continuous integration ...
 
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
 
Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...
Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...
Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...
 
Dev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei TechnosoftDev ops testautomatisierer bei Technosoft
Dev ops testautomatisierer bei Technosoft
 
WebLogic im Docker Container
WebLogic im Docker ContainerWebLogic im Docker Container
WebLogic im Docker Container
 
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)
 
PHP Deployment mit Ansible
PHP Deployment mit AnsiblePHP Deployment mit Ansible
PHP Deployment mit Ansible
 
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
 
OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!OpenShift-Build-Pipelines: Build ► Test ► Run!
OpenShift-Build-Pipelines: Build ► Test ► Run!
 
Mit LoRaWAN und Serverless zur eigenen Smart-Office-Lösung
Mit LoRaWAN und Serverless zur eigenen Smart-Office-LösungMit LoRaWAN und Serverless zur eigenen Smart-Office-Lösung
Mit LoRaWAN und Serverless zur eigenen Smart-Office-Lösung
 
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.
 
Enterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue NormalEnterprise Cloud Native ist das neue Normal
Enterprise Cloud Native ist das neue Normal
 
Der Status Quo des Chaos Engineerings
Der Status Quo des Chaos EngineeringsDer Status Quo des Chaos Engineerings
Der Status Quo des Chaos Engineerings
 

Ähnlich wie Migration zum Zend Framework 3

IPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive WorkshopIPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive Workshop
Ralf Eggert
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
luckec
 
fn project serverless computing
fn project serverless computingfn project serverless computing
fn project serverless computing
Wolfgang Weigend
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Torsten Kleiber
 
Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and Operations
Torsten Kleiber
 
Vagrant
VagrantVagrant
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
OPITZ CONSULTING Deutschland
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
s0enke
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
OPITZ CONSULTING Deutschland
 
SignalR
SignalRSignalR
Effizienter Hardware LifeCycle auf Oracle SPARC M7 Server
Effizienter Hardware LifeCycle auf Oracle SPARC M7 ServerEffizienter Hardware LifeCycle auf Oracle SPARC M7 Server
Effizienter Hardware LifeCycle auf Oracle SPARC M7 Server
JomaSoft
 
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
Digicomp Academy AG
 
Continuous Deployment mit Rex und Jenkins
Continuous Deployment mit Rex und JenkinsContinuous Deployment mit Rex und Jenkins
Continuous Deployment mit Rex und Jenkins
inovex GmbH
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
Jan Gehring
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Bjoern Reinhold
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit Maven
Stefan Scheidt
 
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
NETWAYS
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
gedoplan
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
Steven Grzbielok
 
.NET zu .NET Core
.NET zu .NET Core.NET zu .NET Core
.NET zu .NET Core
Hendrik Lösch
 

Ähnlich wie Migration zum Zend Framework 3 (20)

IPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive WorkshopIPC2017SE - Zend\Expressive Workshop
IPC2017SE - Zend\Expressive Workshop
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
fn project serverless computing
fn project serverless computingfn project serverless computing
fn project serverless computing
 
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
Das dreckige Dutzend - ADF Migration nach 12c in der IKB - DOAG 2014.
 
Forms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and OperationsForms and Reports 12c - Processes and Automation in Development and Operations
Forms and Reports 12c - Processes and Automation in Development and Operations
 
Vagrant
VagrantVagrant
Vagrant
 
Vagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und ArchitektenVagrant, Puppet, Docker für Entwickler und Architekten
Vagrant, Puppet, Docker für Entwickler und Architekten
 
Einführung in Puppet und Vagrant
Einführung in Puppet und VagrantEinführung in Puppet und Vagrant
Einführung in Puppet und Vagrant
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
SignalR
SignalRSignalR
SignalR
 
Effizienter Hardware LifeCycle auf Oracle SPARC M7 Server
Effizienter Hardware LifeCycle auf Oracle SPARC M7 ServerEffizienter Hardware LifeCycle auf Oracle SPARC M7 Server
Effizienter Hardware LifeCycle auf Oracle SPARC M7 Server
 
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
 
Continuous Deployment mit Rex und Jenkins
Continuous Deployment mit Rex und JenkinsContinuous Deployment mit Rex und Jenkins
Continuous Deployment mit Rex und Jenkins
 
Rex - Infrastruktur als Code
Rex - Infrastruktur als CodeRex - Infrastruktur als Code
Rex - Infrastruktur als Code
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit Maven
 
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
 
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
Das Runde muss in das Eckige - Java-Anwendungen für Kubernetes entwickeln und...
 
Boost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with DockerBoost your APEX Deployment and Provisioning with Docker
Boost your APEX Deployment and Provisioning with Docker
 
.NET zu .NET Core
.NET zu .NET Core.NET zu .NET Core
.NET zu .NET Core
 

Mehr von Ralf Eggert

PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)
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 heute
Ralf 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 Edition
Ralf 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 entwickeln
Ralf 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 Reise
Ralf Eggert
 
8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup8. Hamburg Voice Interface Meetup
8. Hamburg Voice Interface Meetup
Ralf Eggert
 
Welcome Bixby
Welcome BixbyWelcome Bixby
Welcome Bixby
Ralf Eggert
 
Alexa Skill Maintenance
Alexa Skill MaintenanceAlexa Skill Maintenance
Alexa Skill Maintenance
Ralf Eggert
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
Ralf 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 100
Ralf Eggert
 
Vom Zend Framework zu Laminas
Vom Zend Framework zu LaminasVom Zend Framework zu Laminas
Vom Zend Framework zu Laminas
Ralf Eggert
 
Alexa for Hospitality
Alexa for HospitalityAlexa for Hospitality
Alexa for Hospitality
Ralf 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 Sprachanwendungen
Ralf 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 Projekte
Ralf Eggert
 
Künstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und WirklichkeitKünstliche Intelligenz – Traum und Wirklichkeit
Künstliche Intelligenz – Traum und Wirklichkeit
Ralf 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 Alexa
Ralf Eggert
 

Mehr von Ralf Eggert (20)

PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)PHP Rewrite: Do the right thing (IPC Berlin 2024)
PHP Rewrite: Do the right thing (IPC Berlin 2024)
 
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
 

Migration zum Zend Framework 3

  • 1. WebinarWebinar Migration zum Zend Framework 3Migration zum Zend Framework 3
  • 2. Ralf EggertRalf Eggert CEO Travello GmbH, PHP Entwickler,CEO Travello GmbH, PHP Entwickler, Zend Framework Trainer, Autor & Coach sowieZend Framework Trainer, Autor & Coach sowie Amazon Alexa Skill EntwicklerAmazon Alexa Skill Entwickler
  • 3. Ralf EggertRalf Eggert 33 vonvon 6868 Agenda Teil 1: Neuerungen im Zend Framework 3 Teil 2: Überblick ZendExpressive Teil 3: Vorbereitungen für Migration Teil 4: Migration vom ZF1 MVC zu ZF3 Middleware Teil 5: Migration vom ZF2 MVC zu ZF3 MVC Teil 6: Migration vom ZF3 MVC zu ZF3 Middleware
  • 4. Teil 1Teil 1 Neuerungen im Zend Framework 3Neuerungen im Zend Framework 3
  • 5. Ralf EggertRalf Eggert 55 vonvon 6868 Fakten zum ZF3 ZF1 Support endete 09/2016 PHP 7 kompatibel ZF2 LTS bis 03/2018 PHP 5.6 vorausgesetzt Über 160 Mio. installierte Pakete ZF3 erschienen im 07/2016 Über 60 Komponenten
  • 6. Ralf EggertRalf Eggert 66 vonvon 6868 Auswahl Komponenten MVC Formulare Middleware Input-Filter Validatoren View Filter Authentifizierung Autorisierung Cache Session Konfiguration Datenbanken Dateien Service-Manager Event-Manager Modul-Manager Hydrator
  • 7. Ralf EggertRalf Eggert 77 vonvon 6868 Framework Silos 2006 - 2015
  • 8. Ralf EggertRalf Eggert 88 vonvon 6868 Ende Framework Silos seit 2016
  • 9. Ralf EggertRalf Eggert 99 vonvon 6868 Performance Optimierungen Zend Framework 2 Zend Framework 34x schneller
  • 10. Ralf EggertRalf Eggert 1010 vonvon 6868 Standardisierung: www.php-fig.org
  • 11. Ralf EggertRalf Eggert 1111 vonvon 6868 Verbesserte Dokumentation
  • 12. Ralf EggertRalf Eggert 1212 vonvon 6868 Entkopplung der Komponenten ZendMvc 2.5 4 feste Abhängigkeiten, z.B. zu ZendForm 19 optionale Abhängigkeiten, z.B. zu ZendI18n oder ZendAuthentication 0 Integrationskomponenten 0 Plugin-Komponenten ZendMvc 3.0 7 feste Abhängigkeiten, z.B. zu ZendServiceManager 9 optionale Abhängigkeiten, z.B. zu ZendMvcI18n oder ZendMvcPluginIdentity 2 Integrationskomponenten 4 Plugin-Komponenten
  • 13. Ralf EggertRalf Eggert 1313 vonvon 6868 Kontinuität & Community
  • 14. Ralf EggertRalf Eggert 1414 vonvon 6868 Migration Guide
  • 15. Ralf EggertRalf Eggert 1515 vonvon 6868 Diversifikation Ich bin zwei Öltanks FRAMEWORKS
  • 16. Ralf EggertRalf Eggert 1616 vonvon 6868 Middleware vs. MVC ZendMvcZendExpressive Neues Konzept Wenige Module Middleware Pipeline Schwerere Integration unerfahrene Entwickler Neue Projekte Migration komplexer sehr performant erprobt & stabil viele Module Migration einfach Leichte Integration erfahrene Entwickler Event Manager Bestands- projekte weniger performant Zukunft Gegenwart
  • 17. Ralf EggertRalf Eggert 1717 vonvon 6868 Entscheidungsmatrix für Migration Projektlaufzeit Kurzfristig (wenige Monate) Projektlaufzeit Mittelfristig (einige Jahre) Projektlaufzeit Langfristig (mehrere Jahre) Projektbasis Zend Framework 2 Upgrade auf die neuesten ZF2 Komponenten Upgrade auf ZF3 MVC Upgrade auf ZF3 Middleware Projektbasis Zend Framework 1 Upgrade auf die neueste ZF1 Version und Daumen drücken Upgrade auf ZF3 Middleware (übergangsweise Parallelbetrieb mit ZF1) Upgrade auf ZF3 Middleware (übergangsweise Parallelbetrieb mit ZF1) Projektbasis Kein Zend Framework Daumen drücken Upgrade auf ZF3 Middleware (übergangsweise Parallelbetrieb mit Legacy Anwendung) Upgrade auf ZF3 Middleware (übergangsweise Parallelbetrieb mit Legacy Anwendung)
  • 19. Teil 2Teil 2 Überblick ZendExpressiveÜberblick ZendExpressive
  • 20. Ralf EggertRalf Eggert 2020 vonvon 6868 Was ist der PSR-7?
  • 21. Ralf EggertRalf Eggert 2121 vonvon 6868 Was ist der PSR-15?
  • 22. Ralf EggertRalf Eggert 2222 vonvon 6868 Zend Framework Komponenten ZEND DIACTOROS ZENDSTRATIGILITY ZENDEXPRESSIVE HTTP MESSAGES /PSR-7 MIDDLEWARE / PSR-15 MIDDLEWARE APPLICATIONS
  • 23. Ralf EggertRalf Eggert 2323 vonvon 6868 ZendExpressive Komponenten 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
  • 24. Ralf EggertRalf Eggert 2424 vonvon 6868 Klassischer HTTP Request CLIENT WEBSERVER HTTP REQUEST HTTP RESPONSE
  • 25. Ralf EggertRalf Eggert 2525 vonvon 6868 Middleware-Request HTTP Request HTTP Response Middleware-Pipeline
  • 26. Ralf EggertRalf Eggert 2626 vonvon 6868 Middleware-Pipeline HTTP Request HTTP Response Routing Middleware Authorization Middleware Dispatching Middleware
  • 27. Ralf EggertRalf Eggert 2727 vonvon 6868 Middleware-Aktionen HTTP Request HTTP Response Routing Middleware Action Middleware Authorization Middleware Dispatching Middleware
  • 28. Ralf EggertRalf Eggert 2828 vonvon 6868 Beispiele für Action-Middleware
  • 30. Teil 3Teil 3 Vorbereitungen für MigrationVorbereitungen für Migration
  • 31. Ralf EggertRalf Eggert 3131 vonvon 6868 1. Eigener Branch für Migration
  • 32. Ralf EggertRalf Eggert 3232 vonvon 6868 2. Upgrade auf PHP 7
  • 33. Ralf EggertRalf Eggert 3333 vonvon 6868 3. Composer installieren
  • 34. Ralf EggertRalf Eggert 3434 vonvon 6868 4. Autoloading nur per Composer
  • 35. Ralf EggertRalf Eggert 3535 vonvon 6868 5. Alle Pakete (!) per Composer
  • 36. Ralf EggertRalf Eggert 3636 vonvon 6868 6. Anwendung lauffähig machen
  • 37. Ralf EggertRalf Eggert 3737 vonvon 6868 7. Expressive Skeleton installieren
  • 38. Ralf EggertRalf Eggert 3838 vonvon 6868 Checkliste Vorbereitungen Eigenen Branch für Migration einrichten1 Upgrade auf PHP 72 Composer installieren (falls noch nicht geschehen)3 Autoloading ausschließlich über Composer einrichten4 Alle Pakete und Abhängigkeiten per Composer installieren5 Anwendung lauffähig machen6 Expressive Skeleton in separatem Verzeichnis installieren7
  • 40. Teil 4Teil 4 Migration vom ZF1 MVC zu ZF3 MiddlewareMigration vom ZF1 MVC zu ZF3 Middleware
  • 41. Ralf EggertRalf Eggert 4141 vonvon 6868 Migration ZF1 MVC ZF3 MW→ Legacy Anwendung in eigenes Verzeichnis schieben1 ZendExpressive manuell installieren2 Middleware für Legacy Anwendung einrichten3 Test-Aktion mit neuer Route einrichten und Design anpassen4 ZF1 Application Ressourcen & MVC Plugins zum ZF3 portieren5 Controller-Aktionen zu Middleware-Aktionen migrieren6 Restliche ZF1 Komponenten ersetzen7
  • 42. Ralf EggertRalf Eggert 4242 vonvon 6868 1. Eigenes Legacy Verzeichnis Verzeichnis /legacy im Projekt erstellen Nur /application und /library nach /legacy verschieben Assets wie Grafiken, JS, CSS nicht verschieben Verzeichnis /data und /tmp nicht verschieben Verzeichnis /vendor nicht verschieben Autoloading anpassen (Composer) Anwendung zum Laufen bekommen
  • 43. Ralf EggertRalf Eggert 4343 vonvon 6868 2. ZendExpressive installieren Verzeichnis der Skeleton Application aus Vorbereitungen öffnen Alle Pakete aus composer.json mit Composer installieren Verzeichnis /config übernehmen und anpassen Verzeichnis /module übernehmen mit Application Modul Vorhandene /public/index.php in /public/index.bak.php umbenennen /public/index.php aus Skeleton Application übernehmen Skeleton Application zum Laufen bekommen
  • 44. Ralf EggertRalf Eggert 4444 vonvon 6868 3. Legacy Application Middleware Middleware für Legacy Application in Pipeline integrieren Middleware leitet bei erfolgreichem ZF3 Routing weiter Andernfalls führt Middleware die ZF1 Legacy Anwendung aus Beispiele Startseite für ZF3 und restliche Seiten für ZF1 testen ZF3 Startseite entfernen und ZF1 Startseite testen Anwendung lauffähig machen
  • 45. Ralf EggertRalf Eggert 4545 vonvon 6868 Legacy ZF1 Front-Controller <?php define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../legacy/application')); define('PROJECT_PATH', realpath(dirname(__FILE__) . '/..')); $hostParts = explode('.', $_SERVER['HTTP_HOST']); switch ($hostParts[0]) { case 'dev': define('APPLICATION_ENV', 'development'); break; case 'mobile': define('APPLICATION_ENV', 'mobile'); break; case 'www': default: define('APPLICATION_ENV', 'production'); break; } require_once PROJECT_PATH . '/vendor/autoload.php'; $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap(); $application->run();
  • 46. Ralf EggertRalf Eggert 4646 vonvon 6868 Expressive ZF3 Front-Controller <?php use InteropContainerContainerInterface; use ZendExpressiveApplication; define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../legacy/application')); define('PROJECT_PATH', realpath(dirname(__FILE__) . '/..')); $hostParts = explode('.', $_SERVER['HTTP_HOST']); switch ($hostParts[0]) { case 'dev': define('APPLICATION_ENV', 'development'); break; case 'www': default: define('APPLICATION_ENV', 'production'); break; } require_once PROJECT_PATH . '/vendor/autoload.php'; /** @var ContainerInterface $container */ $container = require PROJECT_PATH . '/config/container.php'; /** @var Application $application */ $application = $container->get(Application::class); $application->run();
  • 47. Ralf EggertRalf Eggert 4747 vonvon 6868 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); } }
  • 48. Ralf EggertRalf Eggert 4848 vonvon 6868 4. Neue Test-Aktion & Design Neue Test-Aktion anlegen (darf in Legacy Anwendung nicht existieren) Eigene Route, eigene Middleware & eigenes Template Layout der ZF3 Anwendung an ZF1 Anwendung anpassen Ggf. weitere Anpassungen für korrekte Darstellung vornehmen Neue Test-Aktion in ZF3 Expressive lauffähig machen Sicherstellen, dass ZF1 Legacy weiterhin lauffähig ist Anwendung lauffähig machen
  • 49. Ralf EggertRalf Eggert 4949 vonvon 6868 5. Ressourcen & Plugins portieren Zend_Application Ressourcen nach ZF3 portieren Zend_Controller Plugins nach ZF3 portieren ZF1 Bootstrap Klasse nicht vergessen Portierung in Konfigurationsdateien und Middleware Pipeline Beispiele: Config für Datenbanken, Caching, Mailsettings, etc. Plugins: Authentifizierung, Autorisierung, Internationalisierung, etc. Anwendung lauffähig machen
  • 50. Ralf EggertRalf Eggert 5050 vonvon 6868 6. Aktionen migrieren Erst nur eine Controller Action migrieren Routing für Aktion in ZF3 Expressive definieren Action Middleware erstellen mit Code aus Controller Action Template aus ZF1 Anwendung in ZF3 Anwendung schieben Aktion unter ZF3 lauffähig bekommen und ZF1 aufräumen Mit allen anderen Aktionen fortfahren Anwendung lauffähig machen
  • 51. Ralf EggertRalf Eggert 5151 vonvon 6868 7. ZF1 Komponenten ersetzen ZF1 Komponenten schrittweise durch ZF3 Komponenten austauschen Zend_Registry → ZendServiceManager (Dependency Injection) Zend_Db → ZendDb (Modelklassen und Datenbankanbindung) Zend_Form → ZendForm (Formulare) Alle weitere ZF1 Komponenten durch ZF3 Komponenten austauschen Alte Legacy Anwendung komplett entfernen Anwendung lauffähig machen
  • 53. Teil 5Teil 5 Migration vom ZF2 MVC zu ZF3 MVCMigration vom ZF2 MVC zu ZF3 MVC
  • 54. Ralf EggertRalf Eggert 5454 vonvon 6868 Migration ZF2 MVC ZF3 MVC→ Zend Framework Meta-Package entfernen1 ZF3 Service Manager installieren2 ZF3 Event Manager installieren3 ZF3 Mvc installieren4 Weitere ZF3 Komponenten installieren5
  • 55. Ralf EggertRalf Eggert 5555 vonvon 6868 1. Meta-Package entfernen Zend Framework Meta-Package aus composer.json entfernen Zend Component Installer installieren Aktuellste ZF2 Komponenten installieren Anwendung lauffähig machen
  • 56. Ralf EggertRalf Eggert 5656 vonvon 6868 2. ZF3 Service Manager installieren ZendServiceManager 3 installieren In Controllern alle Abhängigkeiten injizieren ServiceLocatorAwareInterface entfernen Invokables → InvokableFactory Service Identifier mit Klassennamen statt String Migration Guide beachten Anwendung lauffähig machen
  • 57. Ralf EggertRalf Eggert 5757 vonvon 6868 3. ZF3 Event Manager installieren ZendEventManager 3 installieren Migration abhängig vom Einsatz im Projekt Vereinfachte API in trigger() Methoden Entfernte Interfaces und Methoden beachten Migration Guide beachten Anwendung lauffähig machen
  • 58. Ralf EggertRalf Eggert 5858 vonvon 6868 4. ZF3 MVC installieren Controller anpassen (siehe Service Manager) Jeder Controller braucht (in der Regel) eine Factory Integrationskomponenten beachten (Konsole, I18n, Plugins, etc.) Migration Guide beachten Anwendung lauffähig machen ZendMvc 3 installieren
  • 59. Ralf EggertRalf Eggert 5959 vonvon 6868 5. Weitere ZF3 Komponenten ZendStdlib 3 installieren ZendConfig 3 installieren ZendTest 3 installieren ZendCode 3 installieren ZendCrypt 3 installieren ZendJson 3 installieren ZendMath 3 installieren
  • 61. Teil 6Teil 6 Migration vom ZF3 MVC zu ZF3 MiddlewareMigration vom ZF3 MVC zu ZF3 Middleware
  • 62. Ralf EggertRalf Eggert 6262 vonvon 6868 Migration ZF3 MVC ZF3 MW→ ZendExpressive manuell installieren1 Module migrieren2 MVC Event Listener Middleware Pipeline→3 Projekt aufräumen4
  • 63. Ralf EggertRalf Eggert 6363 vonvon 6868 1. ZendExpressive installieren Verzeichnis der Skeleton Application aus Vorbereitungen öffnen Composer-Konfiguration für ZendExpressive übernehmen Anwendungskonfiguration übernehmen Front-Controller anpassen App Modul aus Skeleton übernehmen und Testen
  • 64. Ralf EggertRalf Eggert 6464 vonvon 6868 2. Module migrieren Config Provider anlegen Konfiguration migrieren Routen migrieren Controller Aktionen Action Middleware migrieren→ Templates migrieren Für alle Module wieder holen
  • 65. Ralf EggertRalf Eggert 6565 vonvon 6868 3. MVC Event Listener migrieren MVC Event Listener identifizieren Für jeden MVC Event Listener eine eigene Middleware erstellen Neue Middleware in Pipeline übernehmen Beispiel: Authentifizierung, Autorisierung, Internationalisierung, etc.
  • 66. Ralf EggertRalf Eggert 6666 vonvon 6868 4. Projekt aufräumen ZendMvc deinstallieren Alle alten MVC Bestandteile entfernen Anwendung lauffähig machen