Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Migration zum Zend Framework 3

166 Aufrufe

Veröffentlicht am

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.

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Migration zum Zend Framework 3

  1. 1. WebinarWebinar Migration zum Zend Framework 3Migration zum Zend Framework 3
  2. 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. 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. 4. Teil 1Teil 1 Neuerungen im Zend Framework 3Neuerungen im Zend Framework 3
  5. 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. 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. 7. Ralf EggertRalf Eggert 77 vonvon 6868 Framework Silos 2006 - 2015
  8. 8. Ralf EggertRalf Eggert 88 vonvon 6868 Ende Framework Silos seit 2016
  9. 9. Ralf EggertRalf Eggert 99 vonvon 6868 Performance Optimierungen Zend Framework 2 Zend Framework 34x schneller
  10. 10. Ralf EggertRalf Eggert 1010 vonvon 6868 Standardisierung: www.php-fig.org
  11. 11. Ralf EggertRalf Eggert 1111 vonvon 6868 Verbesserte Dokumentation
  12. 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. 13. Ralf EggertRalf Eggert 1313 vonvon 6868 Kontinuität & Community
  14. 14. Ralf EggertRalf Eggert 1414 vonvon 6868 Migration Guide
  15. 15. Ralf EggertRalf Eggert 1515 vonvon 6868 Diversifikation Ich bin zwei Öltanks FRAMEWORKS
  16. 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. 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)
  18. 18. Fragen?Fragen?
  19. 19. Teil 2Teil 2 Überblick ZendExpressiveÜberblick ZendExpressive
  20. 20. Ralf EggertRalf Eggert 2020 vonvon 6868 Was ist der PSR-7?
  21. 21. Ralf EggertRalf Eggert 2121 vonvon 6868 Was ist der PSR-15?
  22. 22. Ralf EggertRalf Eggert 2222 vonvon 6868 Zend Framework Komponenten ZEND DIACTOROS ZENDSTRATIGILITY ZENDEXPRESSIVE HTTP MESSAGES /PSR-7 MIDDLEWARE / PSR-15 MIDDLEWARE APPLICATIONS
  23. 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. 24. Ralf EggertRalf Eggert 2424 vonvon 6868 Klassischer HTTP Request CLIENT WEBSERVER HTTP REQUEST HTTP RESPONSE
  25. 25. Ralf EggertRalf Eggert 2525 vonvon 6868 Middleware-Request HTTP Request HTTP Response Middleware-Pipeline
  26. 26. Ralf EggertRalf Eggert 2626 vonvon 6868 Middleware-Pipeline HTTP Request HTTP Response Routing Middleware Authorization Middleware Dispatching Middleware
  27. 27. Ralf EggertRalf Eggert 2727 vonvon 6868 Middleware-Aktionen HTTP Request HTTP Response Routing Middleware Action Middleware Authorization Middleware Dispatching Middleware
  28. 28. Ralf EggertRalf Eggert 2828 vonvon 6868 Beispiele für Action-Middleware
  29. 29. Fragen?Fragen?
  30. 30. Teil 3Teil 3 Vorbereitungen für MigrationVorbereitungen für Migration
  31. 31. Ralf EggertRalf Eggert 3131 vonvon 6868 1. Eigener Branch für Migration
  32. 32. Ralf EggertRalf Eggert 3232 vonvon 6868 2. Upgrade auf PHP 7
  33. 33. Ralf EggertRalf Eggert 3333 vonvon 6868 3. Composer installieren
  34. 34. Ralf EggertRalf Eggert 3434 vonvon 6868 4. Autoloading nur per Composer
  35. 35. Ralf EggertRalf Eggert 3535 vonvon 6868 5. Alle Pakete (!) per Composer
  36. 36. Ralf EggertRalf Eggert 3636 vonvon 6868 6. Anwendung lauffähig machen
  37. 37. Ralf EggertRalf Eggert 3737 vonvon 6868 7. Expressive Skeleton installieren
  38. 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
  39. 39. Fragen?Fragen?
  40. 40. Teil 4Teil 4 Migration vom ZF1 MVC zu ZF3 MiddlewareMigration vom ZF1 MVC zu ZF3 Middleware
  41. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  52. 52. Fragen?Fragen?
  53. 53. Teil 5Teil 5 Migration vom ZF2 MVC zu ZF3 MVCMigration vom ZF2 MVC zu ZF3 MVC
  54. 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. 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. 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. 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. 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. 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
  60. 60. Fragen?Fragen?
  61. 61. Teil 6Teil 6 Migration vom ZF3 MVC zu ZF3 MiddlewareMigration vom ZF3 MVC zu ZF3 Middleware
  62. 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. 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. 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. 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. 66. Ralf EggertRalf Eggert 6666 vonvon 6868 4. Projekt aufräumen ZendMvc deinstallieren Alle alten MVC Bestandteile entfernen Anwendung lauffähig machen
  67. 67. Fragen?Fragen?
  68. 68. Danke!Danke! Fragen an ralf@travello.deFragen an ralf@travello.de

×