Die Migration älterer Projekte zum neuen Zend Framework 3 will wohlgeplant sein; statt Aktionismus ist eine solide Vorbereitung essentiell. Wie komplex die Migration zum ZF3 ist, hängt stark von dem zu migrierenden Projekt ab: Läuft Ihre Anwendung bereits auf aktuellsten Zend Framework 2-Komponenten, kann die Migration deutlich schneller verlaufen als bei einem älteren Zend Framework 1 Projekt.
In dieser Präsentation erfahren Sie, welche wesentlichen Änderungen das ZF3 mit sich bringt und wie Sie eine Migration sinnvoll angehen sollten. Dabei beleuchtet Ralf Eggert dank seiner langjährigen Projekterfahrung verschiedene Szenarien. Zusätzlich bekommen Sie einige Checklisten an die Hand mit dem Ziel, Ihre Migration optimal vorbereiten zu können.
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
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
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
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
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