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

Migration zum Zend Framework 3

  • 1.
    WebinarWebinar Migration zum ZendFramework 3Migration zum Zend Framework 3
  • 2.
    Ralf EggertRalf Eggert CEOTravello 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 Eggert33 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 Neuerungenim Zend Framework 3Neuerungen im Zend Framework 3
  • 5.
    Ralf EggertRalf Eggert55 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 Eggert66 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 Eggert77 vonvon 6868 Framework Silos 2006 - 2015
  • 8.
    Ralf EggertRalf Eggert88 vonvon 6868 Ende Framework Silos seit 2016
  • 9.
    Ralf EggertRalf Eggert99 vonvon 6868 Performance Optimierungen Zend Framework 2 Zend Framework 34x schneller
  • 10.
    Ralf EggertRalf Eggert1010 vonvon 6868 Standardisierung: www.php-fig.org
  • 11.
    Ralf EggertRalf Eggert1111 vonvon 6868 Verbesserte Dokumentation
  • 12.
    Ralf EggertRalf Eggert1212 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 Eggert1313 vonvon 6868 Kontinuität & Community
  • 14.
    Ralf EggertRalf Eggert1414 vonvon 6868 Migration Guide
  • 15.
    Ralf EggertRalf Eggert1515 vonvon 6868 Diversifikation Ich bin zwei Öltanks FRAMEWORKS
  • 16.
    Ralf EggertRalf Eggert1616 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 Eggert1717 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)
  • 18.
  • 19.
    Teil 2Teil 2 ÜberblickZendExpressiveÜberblick ZendExpressive
  • 20.
    Ralf EggertRalf Eggert2020 vonvon 6868 Was ist der PSR-7?
  • 21.
    Ralf EggertRalf Eggert2121 vonvon 6868 Was ist der PSR-15?
  • 22.
    Ralf EggertRalf Eggert2222 vonvon 6868 Zend Framework Komponenten ZEND DIACTOROS ZENDSTRATIGILITY ZENDEXPRESSIVE HTTP MESSAGES /PSR-7 MIDDLEWARE / PSR-15 MIDDLEWARE APPLICATIONS
  • 23.
    Ralf EggertRalf Eggert2323 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 Eggert2424 vonvon 6868 Klassischer HTTP Request CLIENT WEBSERVER HTTP REQUEST HTTP RESPONSE
  • 25.
    Ralf EggertRalf Eggert2525 vonvon 6868 Middleware-Request HTTP Request HTTP Response Middleware-Pipeline
  • 26.
    Ralf EggertRalf Eggert2626 vonvon 6868 Middleware-Pipeline HTTP Request HTTP Response Routing Middleware Authorization Middleware Dispatching Middleware
  • 27.
    Ralf EggertRalf Eggert2727 vonvon 6868 Middleware-Aktionen HTTP Request HTTP Response Routing Middleware Action Middleware Authorization Middleware Dispatching Middleware
  • 28.
    Ralf EggertRalf Eggert2828 vonvon 6868 Beispiele für Action-Middleware
  • 29.
  • 30.
    Teil 3Teil 3 Vorbereitungenfür MigrationVorbereitungen für Migration
  • 31.
    Ralf EggertRalf Eggert3131 vonvon 6868 1. Eigener Branch für Migration
  • 32.
    Ralf EggertRalf Eggert3232 vonvon 6868 2. Upgrade auf PHP 7
  • 33.
    Ralf EggertRalf Eggert3333 vonvon 6868 3. Composer installieren
  • 34.
    Ralf EggertRalf Eggert3434 vonvon 6868 4. Autoloading nur per Composer
  • 35.
    Ralf EggertRalf Eggert3535 vonvon 6868 5. Alle Pakete (!) per Composer
  • 36.
    Ralf EggertRalf Eggert3636 vonvon 6868 6. Anwendung lauffähig machen
  • 37.
    Ralf EggertRalf Eggert3737 vonvon 6868 7. Expressive Skeleton installieren
  • 38.
    Ralf EggertRalf Eggert3838 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
  • 39.
  • 40.
    Teil 4Teil 4 Migrationvom ZF1 MVC zu ZF3 MiddlewareMigration vom ZF1 MVC zu ZF3 Middleware
  • 41.
    Ralf EggertRalf Eggert4141 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 Eggert4242 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 Eggert4343 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 Eggert4444 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 Eggert4545 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 Eggert4646 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 Eggert4747 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 Eggert4848 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 Eggert4949 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 Eggert5050 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 Eggert5151 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
  • 52.
  • 53.
    Teil 5Teil 5 Migrationvom ZF2 MVC zu ZF3 MVCMigration vom ZF2 MVC zu ZF3 MVC
  • 54.
    Ralf EggertRalf Eggert5454 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 Eggert5555 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 Eggert5656 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 Eggert5757 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 Eggert5858 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 Eggert5959 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
  • 60.
  • 61.
    Teil 6Teil 6 Migrationvom ZF3 MVC zu ZF3 MiddlewareMigration vom ZF3 MVC zu ZF3 Middleware
  • 62.
    Ralf EggertRalf Eggert6262 vonvon 6868 Migration ZF3 MVC ZF3 MW→ ZendExpressive manuell installieren1 Module migrieren2 MVC Event Listener Middleware Pipeline→3 Projekt aufräumen4
  • 63.
    Ralf EggertRalf Eggert6363 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 Eggert6464 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 Eggert6565 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 Eggert6666 vonvon 6868 4. Projekt aufräumen ZendMvc deinstallieren Alle alten MVC Bestandteile entfernen Anwendung lauffähig machen
  • 67.
  • 68.