Zend\Expressive ist das neue PSR-7 kompatible Middleware-Framework aus dem Zend Framework 3, mit dem Sie eigene Web- und REST-Anwendungen mit PHP implementieren können. In dieser Session erhalten Sie einen Überblick über die grundlegende Theorie sowie die Möglichkeiten von Zend\Expressive und erfahren auch die Unterschiede zum klassischen MVC-Ansatz.
9 Tipps für die Modernisierung von PHP-AnwendungenRalf Eggert
PHP hat mittlerweile über 20 Jahre auf dem Buckel und die Entwicklung hat in den letzten Jahren gerade mit PHP 7 und den vielen nützlichen Frameworks einen weiteren Schub bekommen. Da ist es nicht verwunderlich, dass viele langjährig gewachsene PHP Anwendungen mittlerweile ein wenig in die Jahre gekommen sind. In dieser Session erhalten Sie 9 Tipps, mit denen Sie Ihre PHP Anwendung Schritt für Schritt modernisieren können, und erfahren auch, warum ein Reworking mit stetigem Refactoring besser als ein Rewrite mit einmaligem Relaunch ist.
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.
W-JAX 2013 Spring Batch - Performance und Skalierbarkeittobiasflohre
Slides to our (Dennis Schulte and me) talk at the German Java conference W-JAX 2013 in Munich. Subject is the batch processing framework Spring Batch, general hints regarding performance in batch applications and scalability options in Spring Batch. Slides are in German.
In diesem Vortrag erfahren Sie, warum sich der erste Ansatz einer zentralen CI/CD-Installation für alle Teams als problematisch erwies und durch dezentrale Pipelines ersetzt wurde. Danach lernen Sie die Tücken unserer Einführung einer eingekauften API-Management-Lösung kennen, und wieso sich der Kauf von großer On-Premise-Software nur schwer mit den agilen Prinzipien vereinbaren lässt. Der Zuhörer lernt zudem, wie wir im Team mit polyglotter Softwareentwicklung zu kämpfen haben und wie wir permanent gegen Wissensinseln ankämpfen. Zuletzt gehe ich darauf ein, wie wir mit umfassender Architekturdokumentation gestartet und gescheitert sind. Unser neuer Ansatz ist eine leichtgewichtige dezentrale Dokumentation mit AsciiDoc und ein im Team abgestimmter Toolstack, der auch vom Zuhörer adaptiert werden kann. Am Ende der Reise wird der Zuhörer einige Methoden und Tools kennen gelernt haben, um in einem Kontext zu überleben, der an vielen Stellen noch von klassischen Prozessen dominiert wird. Aber eines ist klar: Der Weg Richtung DevOps geht nicht plötzlich, es ist eine Reise mit Umwegen und Hindernissen. Die Reise ist es aber auf jeden Fall Wert!
Per Anhalter zu Cloud-nativen API GatewaysQAware GmbH
betterCode, April 2021, online: Vortrag von Mario-Leander Reimer (@LeanderReimer, Principal Software Architect bei QAware)
== Please download slides if blurred! ==
Abstract:
Gute APIs sind das Herzstück erfolgreicher digitale Produkte und Cloud-nativer Anwendungen. Doch für komplexe Systeme mit zahlreichen Abnehmern ist die ordnungsgemäße Verwaltung dieser APIs von größter Bedeutung. In diesem Vortrag werden wir das Cloud-native API-Gateway-Ökosystem näher betrachten: Ambassador, Gloo, KrakenD, Kong, Tyk et al.
9 Tipps für die Modernisierung von PHP-AnwendungenRalf Eggert
PHP hat mittlerweile über 20 Jahre auf dem Buckel und die Entwicklung hat in den letzten Jahren gerade mit PHP 7 und den vielen nützlichen Frameworks einen weiteren Schub bekommen. Da ist es nicht verwunderlich, dass viele langjährig gewachsene PHP Anwendungen mittlerweile ein wenig in die Jahre gekommen sind. In dieser Session erhalten Sie 9 Tipps, mit denen Sie Ihre PHP Anwendung Schritt für Schritt modernisieren können, und erfahren auch, warum ein Reworking mit stetigem Refactoring besser als ein Rewrite mit einmaligem Relaunch ist.
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.
W-JAX 2013 Spring Batch - Performance und Skalierbarkeittobiasflohre
Slides to our (Dennis Schulte and me) talk at the German Java conference W-JAX 2013 in Munich. Subject is the batch processing framework Spring Batch, general hints regarding performance in batch applications and scalability options in Spring Batch. Slides are in German.
In diesem Vortrag erfahren Sie, warum sich der erste Ansatz einer zentralen CI/CD-Installation für alle Teams als problematisch erwies und durch dezentrale Pipelines ersetzt wurde. Danach lernen Sie die Tücken unserer Einführung einer eingekauften API-Management-Lösung kennen, und wieso sich der Kauf von großer On-Premise-Software nur schwer mit den agilen Prinzipien vereinbaren lässt. Der Zuhörer lernt zudem, wie wir im Team mit polyglotter Softwareentwicklung zu kämpfen haben und wie wir permanent gegen Wissensinseln ankämpfen. Zuletzt gehe ich darauf ein, wie wir mit umfassender Architekturdokumentation gestartet und gescheitert sind. Unser neuer Ansatz ist eine leichtgewichtige dezentrale Dokumentation mit AsciiDoc und ein im Team abgestimmter Toolstack, der auch vom Zuhörer adaptiert werden kann. Am Ende der Reise wird der Zuhörer einige Methoden und Tools kennen gelernt haben, um in einem Kontext zu überleben, der an vielen Stellen noch von klassischen Prozessen dominiert wird. Aber eines ist klar: Der Weg Richtung DevOps geht nicht plötzlich, es ist eine Reise mit Umwegen und Hindernissen. Die Reise ist es aber auf jeden Fall Wert!
Per Anhalter zu Cloud-nativen API GatewaysQAware GmbH
betterCode, April 2021, online: Vortrag von Mario-Leander Reimer (@LeanderReimer, Principal Software Architect bei QAware)
== Please download slides if blurred! ==
Abstract:
Gute APIs sind das Herzstück erfolgreicher digitale Produkte und Cloud-nativer Anwendungen. Doch für komplexe Systeme mit zahlreichen Abnehmern ist die ordnungsgemäße Verwaltung dieser APIs von größter Bedeutung. In diesem Vortrag werden wir das Cloud-native API-Gateway-Ökosystem näher betrachten: Ambassador, Gloo, KrakenD, Kong, Tyk et al.
Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...Alex Sili
Legacy-Software-Refactoring
Welche Zielsetungen sind für ein erfolgreiches Software-Refactoring-Projekt relevant?
Diese Präsentation bietet einen exklusiven Einblick für IT-Manager, IT-Leiter, Product Owner und Entwicklungsleiter.
Technosoft Software Development unterstützt IT-Unternehmen in Deutschland, den Niederlanden, Österreich, Schweiz, Liechtenstein bei der erfolgreichen Umsetzung ihrer Refactoring-Projekte.
Dev ops testautomatisierer bei TechnosoftBart Zwager
Diese Präsentation wurde ende 2019 mit einem Sonderpreis auf der Moldova Developer Conference (MDC) in Chisinau, Moldawien ausgezeichnet. Technosoft Moldova ist unser Hauptentwicklungszentrum in Osteuropa und zuständig für die professionelle Abwicklung von Entwicklungsprojekten im gesamten DACH-Raum.
Dream-Team: Roslyn & Visual Studio ExtensionsRobin Sedlaczek
Slides from my talk about the dream team Roslyn & Visual Studio Extensions. It's more a live-coding session than a talk, where I show a lot of examples combining the power of Roslyn (the Microsoft .NET Compiler Platform) and Visual Studio Extensions. This dream team can improve your code quality and security, increase your developer productivity or improve/support the development process as well as the application lifecycle management of your project.
And that is only the peak of the iceberg. At the end, this talk should open up your minds and unleash your creativity to create great ideas that help your team and your project.
.NET 5 klopft nicht mehr nur leicht an die Tür, es trommelt vielmehr in ohrenbetäubender Lautstärke. Seit Microsoft angekündigt hat, dass das klassische .NET zukünftig nicht mehr unterstützt wird, stellt sich kaum noch die Frage ob, sondern nur noch wann, eine Migration notwendig wird.
In dieser Dev Session betrachten wir deshalb zunächst was es mit den verschiedenen .NET Versionen auf sich hat und wie sich diese über die Jahre entwickelt haben. Anschließend migrieren wir eine WPF Anwendung und betrachten hierbei das Vorgehen, sowie die damit verbundenen Herausforderungen. Dabei gehen wir auch auf die Zukunft von so wichtigen Bestandteilen wie Entity Framework und Windows Communication Foundation ein. Abschließend behandeln wir Migrationsszenarien bei denen nicht die gesamte, sondern nur Teile von Anwendungen migriert werden und erläutern die damit verbundenen Migrationsstrategien beispielhaft.
BASTA! 2016 - Roslyn & Visual Studio ExtensionsRobin Sedlaczek
Slides from my talks at the BASTA! Conference 2016 in Mainz. It's about the Microsoft .NET Compiler Platform (Roslyn), Visual Studio Extensions and increasing productivity when combining them.
Kaps - Es muss nicht immer Kubernetes seinStephan Kaps
In vielen größeren Institutionen gibt es noch jede Menge Software, die eher monolithisch aufgebaut ist, die häufig in Applikation-Servern auf dedizierten virtuellen Maschinen von einem eher klassisch aufgestellten und organisatorisch separierten IT-Betrieb betrieben wird. In Fachzeitschriften, Online-Artikeln und Konferenzen wird vorgeführt, wie einfach es doch ist, einen Hello-World Spring Boot Microservice mit mehreren Instanzen auf Kubernetes zu deployen. Doch zurück im Unternehmen wird klar: sollte man es tatsächlich schaffen, alle notwendigen Personen davon zu überzeugen, ab sofort Kubernetes einzuführen, wird das für einen meist auch personell am Limit arbeitenden IT-Betrieb schnell zu einem Projekt mit vermutlich 1-2 Jahren Laufzeit (je nach Erfahrung), mit möglichen Seiteneffekten wie reduzierter Handlungsfähigkeit für das laufende Geschäft und dem Zurückstellen anderer Modernisierungsmaßnahmen. In diesem Vortrag werden wir die sich kontinuierlich entwickelnde (evolving) Architektur einer Anwendungslandschaft hin zu Cloud Native betrachten und dabei (OpenSource) Werkzeuge kennen lernen für die schrittweise Anpassung der on-premise Infrastruktur, ohne Kubernetes.
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)Ralf Eggert
• ZF1 Projekt vorbereiten
• ZF2 Skeleton integrieren
• Startseite nach ZF2 migrieren
• MVC-Layer für Blog Modul migrieren
• Authentifizierung & Autorisierung migrieren
• Model-Layer für Blog Modul migrieren
Meine Slides für den ganzjährigen Workshop zu Zend\Expressive auf der International PHP Conference 2017 Spring Edition. Die Slides bilden die Grundlagen für den Workshop.
IPC 2017 - Legacy-Anwendungen mit Expressive modernisierenRalf Eggert
Überall hören Sie von den neuen Möglichkeiten, die Ihnen die modernen PHP-Frameworks und -Tools bieten können, doch Sie müssen immer noch an einer trägen und veralteten Legacy-Anwendung arbeiten? Ein kompletter Relaunch kommt aus Kostengründen und aufgrund stetig zu implementierender Features nicht in Frage? Mit dem Microframework Expressive können Sie beides vereinen. Sie können ein modernes und leichtgewichtiges Framework einsetzen und parallel dazu Ihre Legacy-Anwendung betreiben. Damit schaffen Sie die Grundlage, um Ihre Anwendung schrittweise zu modernisieren und damit wettbewerbsfähig zu bleiben.
This is my talk I gave at the International PHP Conference 2007 - Spring Edition in Ludwigsburg, Germany. The talk introduces the basic concepts of the Zend Framework. Additionally some components are shown in more detail and some advanced concepts are covered.
Das Zend Framework 3 bietet mit seiner MVC-Komponente und mit dem Nebenprojekt Apigility bereits verschiedene Möglichkeiten, ein RESTful API auf Basis von PHP zu entwickeln. Doch auch das neue Microframework Expressive ist für den Betrieb eines RESTful Web Services geeignet. In der simpelsten Variante reichen nach der Installation der Skeleton Application nur wenige Zeilen Code für ein REST-API. Durch das offene Konzept sind jedoch auch komplexere API-Anwendungen flexibel und ohne großen Frameworkballast zu entwickeln. In diesem Vortrag erfahren Sie alles Wissenswerte zu Expressive und dem Aufbau einer RESTful Anwendung mit PHP.
Das Jahr 2015 steht ganz im Zeichen der erneuerten PHP-Frameworks. Auch das Zend Framework lässt sich nicht lumpen und erfindet sich neu: Der Fokus liegt auf der Implementation des PSR-7-Standards, dem Thema Middleware und einer tieferen Separierung der einzelnen Frameworkkomponenten. Als Ergänzung zum Full-Stack-Framework wird es leichtgewichtigere Alternativen geben. Erfahren Sie in dieser Session, was das Zend Framework 3 alles Neues bringt und was Sie als Entwickler bei der Migration Ihrer Zend-Framework-2-Anwendungen beachten müssen.
In diesen Folien erfahren Entwickler, ob es sich lohnt, bereits jetzt auf die neueste Version Visual Studio 2012 zu setzen. Wie gewohnt bringt Microsoft eine Fülle von neuen Features. Aber welche davon sind im Alltag wirklich relevant? Was wird nicht mehr unterstützt?
Erfahren Sie in diesem Talk, wie Sie das Zend Framework 2 gewinnbringend für Ihre eigenen Projekte einsetzen können. Sie erhalten Tipps aus der Praxis für die Praxis zu Themen wie Performance, Security, Wiederverwendbarkeit von Modulen, Einsatz des Event-Managers für eigene Zwecke, interessante Fremdmodule, Migration vom ZF1, und vieles mehr.
Legacy-Software-Refactoring - Zielsetzungen für ein erfolgreiches Refactoring...Alex Sili
Legacy-Software-Refactoring
Welche Zielsetungen sind für ein erfolgreiches Software-Refactoring-Projekt relevant?
Diese Präsentation bietet einen exklusiven Einblick für IT-Manager, IT-Leiter, Product Owner und Entwicklungsleiter.
Technosoft Software Development unterstützt IT-Unternehmen in Deutschland, den Niederlanden, Österreich, Schweiz, Liechtenstein bei der erfolgreichen Umsetzung ihrer Refactoring-Projekte.
Dev ops testautomatisierer bei TechnosoftBart Zwager
Diese Präsentation wurde ende 2019 mit einem Sonderpreis auf der Moldova Developer Conference (MDC) in Chisinau, Moldawien ausgezeichnet. Technosoft Moldova ist unser Hauptentwicklungszentrum in Osteuropa und zuständig für die professionelle Abwicklung von Entwicklungsprojekten im gesamten DACH-Raum.
Dream-Team: Roslyn & Visual Studio ExtensionsRobin Sedlaczek
Slides from my talk about the dream team Roslyn & Visual Studio Extensions. It's more a live-coding session than a talk, where I show a lot of examples combining the power of Roslyn (the Microsoft .NET Compiler Platform) and Visual Studio Extensions. This dream team can improve your code quality and security, increase your developer productivity or improve/support the development process as well as the application lifecycle management of your project.
And that is only the peak of the iceberg. At the end, this talk should open up your minds and unleash your creativity to create great ideas that help your team and your project.
.NET 5 klopft nicht mehr nur leicht an die Tür, es trommelt vielmehr in ohrenbetäubender Lautstärke. Seit Microsoft angekündigt hat, dass das klassische .NET zukünftig nicht mehr unterstützt wird, stellt sich kaum noch die Frage ob, sondern nur noch wann, eine Migration notwendig wird.
In dieser Dev Session betrachten wir deshalb zunächst was es mit den verschiedenen .NET Versionen auf sich hat und wie sich diese über die Jahre entwickelt haben. Anschließend migrieren wir eine WPF Anwendung und betrachten hierbei das Vorgehen, sowie die damit verbundenen Herausforderungen. Dabei gehen wir auch auf die Zukunft von so wichtigen Bestandteilen wie Entity Framework und Windows Communication Foundation ein. Abschließend behandeln wir Migrationsszenarien bei denen nicht die gesamte, sondern nur Teile von Anwendungen migriert werden und erläutern die damit verbundenen Migrationsstrategien beispielhaft.
BASTA! 2016 - Roslyn & Visual Studio ExtensionsRobin Sedlaczek
Slides from my talks at the BASTA! Conference 2016 in Mainz. It's about the Microsoft .NET Compiler Platform (Roslyn), Visual Studio Extensions and increasing productivity when combining them.
Kaps - Es muss nicht immer Kubernetes seinStephan Kaps
In vielen größeren Institutionen gibt es noch jede Menge Software, die eher monolithisch aufgebaut ist, die häufig in Applikation-Servern auf dedizierten virtuellen Maschinen von einem eher klassisch aufgestellten und organisatorisch separierten IT-Betrieb betrieben wird. In Fachzeitschriften, Online-Artikeln und Konferenzen wird vorgeführt, wie einfach es doch ist, einen Hello-World Spring Boot Microservice mit mehreren Instanzen auf Kubernetes zu deployen. Doch zurück im Unternehmen wird klar: sollte man es tatsächlich schaffen, alle notwendigen Personen davon zu überzeugen, ab sofort Kubernetes einzuführen, wird das für einen meist auch personell am Limit arbeitenden IT-Betrieb schnell zu einem Projekt mit vermutlich 1-2 Jahren Laufzeit (je nach Erfahrung), mit möglichen Seiteneffekten wie reduzierter Handlungsfähigkeit für das laufende Geschäft und dem Zurückstellen anderer Modernisierungsmaßnahmen. In diesem Vortrag werden wir die sich kontinuierlich entwickelnde (evolving) Architektur einer Anwendungslandschaft hin zu Cloud Native betrachten und dabei (OpenSource) Werkzeuge kennen lernen für die schrittweise Anpassung der on-premise Infrastruktur, ohne Kubernetes.
Migration vom ZF1 zum ZF2 von einfach bis fies (IPC Spring 2013, Berlin)Ralf Eggert
• ZF1 Projekt vorbereiten
• ZF2 Skeleton integrieren
• Startseite nach ZF2 migrieren
• MVC-Layer für Blog Modul migrieren
• Authentifizierung & Autorisierung migrieren
• Model-Layer für Blog Modul migrieren
Meine Slides für den ganzjährigen Workshop zu Zend\Expressive auf der International PHP Conference 2017 Spring Edition. Die Slides bilden die Grundlagen für den Workshop.
IPC 2017 - Legacy-Anwendungen mit Expressive modernisierenRalf Eggert
Überall hören Sie von den neuen Möglichkeiten, die Ihnen die modernen PHP-Frameworks und -Tools bieten können, doch Sie müssen immer noch an einer trägen und veralteten Legacy-Anwendung arbeiten? Ein kompletter Relaunch kommt aus Kostengründen und aufgrund stetig zu implementierender Features nicht in Frage? Mit dem Microframework Expressive können Sie beides vereinen. Sie können ein modernes und leichtgewichtiges Framework einsetzen und parallel dazu Ihre Legacy-Anwendung betreiben. Damit schaffen Sie die Grundlage, um Ihre Anwendung schrittweise zu modernisieren und damit wettbewerbsfähig zu bleiben.
This is my talk I gave at the International PHP Conference 2007 - Spring Edition in Ludwigsburg, Germany. The talk introduces the basic concepts of the Zend Framework. Additionally some components are shown in more detail and some advanced concepts are covered.
Das Zend Framework 3 bietet mit seiner MVC-Komponente und mit dem Nebenprojekt Apigility bereits verschiedene Möglichkeiten, ein RESTful API auf Basis von PHP zu entwickeln. Doch auch das neue Microframework Expressive ist für den Betrieb eines RESTful Web Services geeignet. In der simpelsten Variante reichen nach der Installation der Skeleton Application nur wenige Zeilen Code für ein REST-API. Durch das offene Konzept sind jedoch auch komplexere API-Anwendungen flexibel und ohne großen Frameworkballast zu entwickeln. In diesem Vortrag erfahren Sie alles Wissenswerte zu Expressive und dem Aufbau einer RESTful Anwendung mit PHP.
Das Jahr 2015 steht ganz im Zeichen der erneuerten PHP-Frameworks. Auch das Zend Framework lässt sich nicht lumpen und erfindet sich neu: Der Fokus liegt auf der Implementation des PSR-7-Standards, dem Thema Middleware und einer tieferen Separierung der einzelnen Frameworkkomponenten. Als Ergänzung zum Full-Stack-Framework wird es leichtgewichtigere Alternativen geben. Erfahren Sie in dieser Session, was das Zend Framework 3 alles Neues bringt und was Sie als Entwickler bei der Migration Ihrer Zend-Framework-2-Anwendungen beachten müssen.
In diesen Folien erfahren Entwickler, ob es sich lohnt, bereits jetzt auf die neueste Version Visual Studio 2012 zu setzen. Wie gewohnt bringt Microsoft eine Fülle von neuen Features. Aber welche davon sind im Alltag wirklich relevant? Was wird nicht mehr unterstützt?
Erfahren Sie in diesem Talk, wie Sie das Zend Framework 2 gewinnbringend für Ihre eigenen Projekte einsetzen können. Sie erhalten Tipps aus der Praxis für die Praxis zu Themen wie Performance, Security, Wiederverwendbarkeit von Modulen, Einsatz des Event-Managers für eigene Zwecke, interessante Fremdmodule, Migration vom ZF1, und vieles mehr.
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Gregor Biswanger
Das Jahr 2009 war die Geburtsstunde von Node.js. Dass hierbei JavaScript ebenfalls serverseitig verwendet werden kann, ist nur ein Teilaspekt für den hohen Erfolg. Viel relevanter ist die extrem hohe Performance, Skalierbarkeit und Produktivität. Nicht ohne Grund wird ASP.NET komplett neu erfunden und basiert auf den gleichen Ideen wie Node.js. Namenhafte Firmen wie Microsoft selbst, Google, PayPal, New York Times, GitHub, uvw. setzen bereits auf das leistungsstarke Node.js. Der Vortrag zeigt durch eine Reise der Node.js Architektur, woher die Vorteile kommen. Durch einen Vergleich von ähnlichen Funktionen, wird zudem der ideale Einstieg für .NET Entwickler geboten.
BASTA! Spring 2018 - Architekturen für .NET Core-AnwendungenRobin Sedlaczek
Slides from my workshop about software architectures for .NET Core applications at BASTA! Spring 2018 conference. We talk about architectures for enterprise mobile apps with Xamarin.Forms and ASP.NET Web Apps. Then we went hands-on and developed a CRM system called BASTAdynamics. :) One #microservice per desk, #containerized with #Docker, published to #Azure registry, deployed as Azure web apps. We have #aspnet #angular, #razor, #UWP & #Xamarin.Forms clients. #IdentityServer & @AzureCosmosDB in the backend. AND: We had a lot of fun! :)
Mit LoRaWAN und Serverless zur eigenen Smart-Office-LösungQAware GmbH
building IoT, März 2021, online: Vortrag von Mario-Leander Reimer (@LeanderReimer, Principal Software Architect bei QAware)
Abstract: Mit LoRaWAN und Serverless zur eigenen Smart-Office-Lösung
Die Stadt Rosenheim ist auf dem Weg zur Smart City mit zahlreichen bereits umgesetzten Use Cases im kommunalen Bereich. Mit der Eröffnung unseres neuen Büros in Zeiten der Pandemie sahen wir den Bedarf und die Gelegenheit für eine moderne Raumklima-Überwachung unter Verwendung der lokalen LoRaWAN Infrastruktur. Dieser Vortrag berichtet wie wir in sehr kurzer Zeit eine eigene Smart-Office Lösung umgesetzt haben. Wir beschreiben die konzeptionelle Architektur und zeigen die wesentlichen Bestandteile des komplett Event-getriebenen Serverless Backends auf Basis verschiedener Dienste der Google
Cloud.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
PHP Rewrite: Do the right thing (IPC Berlin 2024)Ralf Eggert
This talk addresses the challenges of modernizing a PHP application that has been under development since 2007 and was initially tightly coupled with its MVC framework. This tight integration led to various problems, including an increase in bugs and prolonged timeframes for implementing changes. We will explore the shift to Domain-Driven Design, Event Sourcing, and Test-Driven Development in the application's complete rewrite. The goal is to lessen the application's dependence on this archaic framework and to address these persistent issues, aligning it with current and future technology standards.
The session offers practical strategies for transforming legacy systems, deeply intertwined with their frameworks, into more adaptable, efficient, and resilient architectures, effectively solving long-standing performance and maintenance issues.
ChatGPT: unser täglich' Bot gib uns heuteRalf Eggert
ChatGPT ist derzeit in aller Munde. Doch was ist eigentlich dran an dieser neuen Wundertechnologie? Wird ChatGPT uns Entwickler bald überflüssig machen? Können IT Leiter in naher Zukunft mit einem komplexen Prompt eine ganze Legacy Anwendung in Nullkommanichts in eine moderne Applikation verwandeln? Oder wenigstens ein Projekt von Symfony 4 auf Laminas umstellen?
Wir schauen in dieser Session einmal, wie wir Entwickler die »Wunderwaffe« ChatGPT in unsere tägliche Arbeit integrieren können. Wir betrachten, wie uns die KI bei konkreten Problemen helfen kann, und wir schauen auch, ob uns ChatGPT auch bei der Projektplanung unterstützen kann. Wir nutzen ChatGPT in so unterschiedlichen Rollen wie Coach, Tester, Systemarchitekt oder Product Owner. Dabei orientieren wir uns auch anhand eines kleinen PHP Projektes, das von der Planung bis zur Umsetzung von ChatGPT begleitet wurde.
Die Teilnehmer bekommen bei dieser Session Tipps und Tricks an die Hand, wie sie heute schon ChatGPT in ihrer täglichen Arbeit einsetzen können, um hier und da ein wenig schneller und produktiver werden zu können. Wir gehen aber auch auf die Gefahren ein und kommen zur Erkenntnis, dass nicht alles Gold ist, was da glänzt, und dass wir keiner einzigen Antwort blind vertrauen dürfen.
Der ultimative PHP Framework Vergleich 2023 EditionRalf Eggert
Auch im Jahr 2023 gibt es immer noch unzählige PHP Frameworks, die mehr oder minder viele Nutzer hinter sich vereinen können. Neben den beiden aktuellen Platzhirschen Symfony und Laravel stehen mit Laminas (ehemals Zend Framework) auch weitere beliebte Frameworks in der zweiten Reihe. Doch wie vergleicht man so unterschiedliche Frameworks wirklich objektiv?
PHP Module als Rundum-Sorglos-Pakete entwickelnRalf Eggert
Wer viele PHP-Projekte entwickelt, kennt die Situation sicherlich: Es gibt verschiedene Features, die in fast jedem Projekt benötigt werden. Sei es das simple Kontaktformular, der Versand von E-Mails, der Einbau eines Cookie-Banners oder die Ausgabe eines Menüs. Beim Start eines neuen Projekts verfällt der Entwickler gerne in das typische Muster, sich schnell alles zusammenzukopieren und so lange anzupassen, bis es passt. Bei zwei oder drei zu betreuenden Projekten ist das noch überschaubar. Aber bei 20, 30 oder gar 100? Wie kann ich den Spamschutz des Kontaktformulars in Dutzenden Projekten verbessern, ohne jedes Projekt einzeln individuell anpassen zu müssen? Die Lösung liegt auf der Hand: wir bauen uns ein Modul, das simpel mit Composer in jedes Projekt gebracht werden kann. Mit Git können wir Releases taggen und somit unterschiedliche Versionen des Moduls bereitstellen. Automatisierte Tests helfen uns beim Sicherstellen der Funktionalitäten. Tolle Sache! Doch manchmal möchten wir Formulare auch mal im Browser anschauen und die HTML-Ausgabe anpassen. Dabei helfen Module, die eine kleine Mini-Anwendung mit sich bringen, die im Browser gestartet werden kann. Wie wir so etwas umsetzen können, zeigt dieser Vortrag.
A new Alexa skill is quickly built and certified at Amazon. Depending on its complexity, this process can be completed in a few weeks. The same applies to Google Actions. But some people put their hands in their laps afterwards and wonder why their new, innovative voice application does not go through the roof. History repeats itself: 25 years ago, with the advent of the World Wide Web, many HTML projects were published whose content was not updated for a long time. Today nobody would launch a website or a smartphone app and then leave it to itself. Why should it be different with an Alexa skill, a Google Action or a Bixby capsule? In this session you will learn about strategies and solutions to make your voice application up-to-date, interactive and interesting. Use the existing tools of the providers and make sure that your content can easily be kept up-to-date. We will also look at the insights and modernization measures from the three-year operation of one of the first German-speaking Alexa Skills.
Kurzvortrag über intelligente persönliche Assistenten und ihre Bedeutung für den Tourismus. Was können die Sprachassistenten und was (noch) nicht? Wie zuverlässig und hilfreich ist die Kommunikation in menschlicher Sprache mit der disruptiven Software?
We had a nice little voice meetup in Hamburg on 15th of January 2020:
This time we will have the following agenda:
- Short presentation Welcome Bixby (about 20 Minutes)
- Discussion: What was your Voice Highlight 2019? What do you wish for 2020?
- plus a little surprise (more will not be revealed yet)
Alexa, Google Assistant, Siri and even Cortana are on everyone’s lips. But what about Bixby? First introduced in 2017 in Korea, the US and China, other languages like French, Spanish, German or
Italian were just launched in the beginning of 2019.
This talk will give a short introduction into the Bixby virtual assistant and how the development of Bixby capsules differs from building Alexa Skills or Google Actions. You will learn about the basic concepts, the tools you need and the Bixby Marketplace.
A short presentation about Alexa Skill maintenance from the Alexa Dev Day in Berlin on 26th of November 2019. Discusses metrics, intent history, reviews and new features.
Das Zend Framework hat eine bewegte Geschichte hinter sich. Unter dem Mantel der Linux Foundation hat es nun eine neue Heimat gefunden und wird im Laminas Projekt weiter geführt. Laminas setzt die Arbeit fort und bündelt die eigenständigen Komponenten, das MVC Framework, Expressive und Apigility in einem neuen gemeinsamen Projekt. In diesem Vortrag erfahren Sie alles über den Wechsel von Rogue Wave Software zur Linux Foundation. Wir schauen, was sich ändern wird, was wegfällt und was neu sein wird. Und wir wagen auch einen Ausblick in die Zukunft des Frameworks.
Alexa Skills und PHP? Passt das zusammen?Ralf Eggert
Zugegeben, die Entwicklung digitaler Sprachanwendungen für Amazons Alexa wird eindeutig von Node.js dominiert. Dies ist der Quasi-Standard, der von Amazon angeboten und stetig ausgebaut wird. Die Entwicklung von Alexa Skills mit PHP fristet nur ein Nischendasein. Dennoch kann es sehr viel Sinn machen, auch bei der Entwicklung digitaler Sprachanwendungen auf PHP zu setzen und vorhandenes Know-how im Team zu nutzen. Denn zur Entwicklung eines professionellen Alexa Skills gehört mehr als nur die direkte Interaktion mit Alexa und dem Alexa Voice Service. Erfahren Sie in diesem Vortrag alles Wissenswerte zur PHP-Entwicklung für Alexa und welche Vorteile es dabei bietet.
Mit dem Jovo Framework ist es einfach möglich, plattformübergreifende Sprachanwendungen für Amazon Alexa und den Google Assistant zu entwickeln. Jovo basiert auf Node.js und hilft durch ein gemeinsames Sprachmodell bei der Entwicklung von Alexa Skills und Google Actions. In diesem Vortrag steigen wir nach einer kurzen Einführung direkt in die Welt der Sprachassistenten ein und schauen uns die grundlegende Vorgehensweise für die Entwicklung einer Sprachanwendung für Alexa und den Google Assistant an. Wir lernen die wichtigsten Features des Jovo Frameworks kennen und durchlaufen die grundlegenden Implementierungsphasen von der Konfiguration über den Code bis hin zum Deployment.
Das Zend Framework hat eine bewegte Geschichte hinter sich. Unter dem Mantel der Linux Foundation hat es nun eine neue Heimat gefunden und wird im Laminas Projekt weiter geführt. Laminas setzt die Arbeit fort und bündelt die eigenständigen Komponenten, das MVC Framework, Expressive und Apigility in einem neuen gemeinsamen Projekt. In diesem Vortrag erfahren Sie alles über den Wechsel von RogueWave Software zur Linux Foundation. Wir schauen, was sich ändern wird, was wegfällt und was neu sein wird. Und wir wagen auch einen Blick in die Zukunft des Frameworks.
Die digitalen Sprachassistenten wie Amazons Alexa und der Google Assistant sind in aller Munde. Nachdem sie schon die häuslichen vier Wände viele Privatnutzer erobert haben, schicken sie sich an, auch in der Hotellerie Fuß zu fassen. Dieser Vortrag führt in das Thema Voice allgemein ein und diskutiert auch die Herausforderungen für die Hotellerie. Zudem erfahren Sie, wie Sie sich mit TINA für Hotels (dem ersten Alexa-Skill-as-a-Service für die Touristik und Hotellerie) diesen Herausforderungen schon heute stellen können.
Alexa, lass uns Geld verdienen – fünf Geschäftsmodelle, die wirklich funktion...Ralf Eggert
Seit dem Aufkommen der digitalen Sprachassistenten, Amazons Alexa oder der Google Assistant, herrscht Goldgräberstimmung. Die nächste Revolution verspricht gute Geschäfte: Innovative Sprachanwendungen, Künstliche Intelligenz, Voice Commerce, Wettrüsten der Technologiegiganten. In der Realität schwemmten zu Beginn jedoch Fakten-Skills, Quizanwendungen und Geräuschgeneratoren den Skill Store. Dazu kamen Adaptionen bestehender Webanwendungen oder Smartphone-Apps, welche oft nur enttäuschte und ratloses Gesichter hinter sich ließen. Die Suche nach der Killerapplikation für digitale Sprachanwendungen begann. Zwei Jahre nach dem offiziellen Deutschlandstart von Alexa und 18 Monate nach dem Start von Google Home in Deutschland werfen wir einen Blick auf fünf verschiedene Geschäftsmodelle für digitale Sprachassistenten, die wirklich funktionieren. Erfahren Sie, wie Entwickler, Agenturen oder Unternehmen an der Voice-Revolution teilnehmen können, ohne blind der Gier nach dem neuen Gold hinterherhecheln zu müssen.
Fortgeschrittene Techniken für erfolgreiche SprachanwendungenRalf Eggert
Viele Entwickler, die mit der Entwicklung eines Alexa-Skills beginnen, machen sich in den seltensten Fällen vorab tiefer gehende Gedanken über ihre Anwendungsstruktur. Quick-Start-Anwendungen und Vorlagen konzentrieren sich in der Regel eher auf die Vermittlung von Featurewissen und weniger darum, eine nachhaltige Anwendungsstruktur einzuführen. Da besteht der eigentliche Code der Sprachanwendungen auch schon mal aus einer einzigen Datei, die durch Konfigurations- oder Sprachdateien angereichert wird.
Für ganz einfache Sprachanwendungen ist das zumeist auch ausreichend. Doch wie sieht es bei komplexeren Anwendungen aus? Wie reagieren wir auf zusätzliche Funktionen und Intents? Wie erhalten wir den Kontext im Rahmen eines Dialogs und wie können wir Daten sinnvoll persistieren? Und was passiert, wenn unsere Sprachanwendung nicht nur für Amazons Alexa, sondern auch für den Google Assistant umgesetzt werden soll?
In dieser Session erfahren Sie, welche Maßnahmen Sie ergreifen können, um den wachsenden Anforderungen an erfolgreiche Sprachanwendungen gerecht zu werden.
Künstliche Intelligenz – Traum und WirklichkeitRalf Eggert
Das Thema Künstliche Intelligenz (KI) ist derzeit in aller Munde. Überall hören wir von intelligenten Chatbots und digitalen Sprachassistenten wie Amazons Alexa, Siri oder Google Home. Entwickler und Unternehmen fügen Ihrer Software eine künstliche Intelligenz hinzu, um ihre Software zu verbessern. Einhergehend werden auch Ängste geschürt vor den Maschinen, die in Form eines realen Skynets bald die Weltherrschaft übernehmen, um die Menschheit zu knechten.
In diesem Vortrag schauen wir uns am Beispiel von digitalen Sprachassistenten wie Amazons Alexa und einiger Chatbots an, wie weit es aktuell mit der künstlichen Intelligenz im Massenmarkt eigentlich her ist. Und wir betrachten auch, inwieweit das Internet der Sprache eine Revolution oder doch eher eine Evolution darstellt.
Multi-Modal Voice Development with Amazon AlexaRalf Eggert
Building a voice application for Amazon Alexa requires the Voice First approach. But with the growing device family with displays like the Echo Spot, the Echo Show, or the Fire TV, you are able to support your voice experience with photos, illustrations, or videos. This session concentrates on how to build a Multi-Modal application with Amazon Alexa. We will have a closer look on the best-practices as well as some tools and techniques to help you to create richer voice applications.
4. Ralf EggertRalf Eggert 44 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Framework Silos von 2006 bis 2015
5. Ralf EggertRalf Eggert 55 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Ende der Framework Silos seit 2016
6. Ralf EggertRalf Eggert 66 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Was ist die PHP-FIG?
7. Ralf EggertRalf Eggert 77 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Was ist der PSR-7?
8. Ralf EggertRalf Eggert 88 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Was ist der PSR-15?
9. Ralf EggertRalf Eggert 99 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Klassischer HTTP Request
CLIENT WEBSERVER
HTTP
REQUEST
HTTP
RESPONSE
10. Ralf EggertRalf Eggert 1010 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Middleware-Request
HTTP
Request
HTTP
Response
Middleware
11. Ralf EggertRalf Eggert 1111 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Middleware-Pipeline
HTTP
Request
HTTP
Response
Routing
Middleware
Authorization
Middleware
Dispatching
Middleware
12. Ralf EggertRalf Eggert 1212 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Middleware-Aktionen
HTTP
Request
HTTP
Response
Routing
Middleware
Action
Middleware
Authorization
Middleware
Dispatching
Middleware
13. Ralf EggertRalf Eggert 1313 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Zend Framework Komponenten
ZEND
DIACTOROS
ZENDSTRATIGILITY
ZENDEXPRESSIVE
HTTP MESSAGES /PSR-7
MIDDLEWARE / PSR-15
MIDDLEWARE
APPLICATIONS
14. Ralf EggertRalf Eggert 1414 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
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
15. Ralf EggertRalf Eggert 1515 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Performance Messdaten
Gemessen im April 2016 mit der ZendExpressive Skeleton 1.0.1
AD = Aura.DI, AR = Aura.Router, FR = FastRoute, ZR = ZendRouter, ZS = ZendServiceManager, ZV = ZendView
Laufzeit (ms) 31,8 106,5 43,8 31,9 103,8 44,9 42,7 117,2 56,1 35,6 31,3
Router FR FR FR AR AR AR ZR ZR ZR FR FR
DI Container ZS ZS ZS ZS ZS ZS ZS ZS ZS AD Pimple
Renderer Plates Twig ZV Plates Twig ZV Plates Twig ZV Plates Plates
16. Ralf EggertRalf Eggert 1616 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Performance Erkenntnisse
AD = Aura.DI, AR = Aura.Router, FR = FastRoute, ZR = ZendRouter, ZS = ZendServiceManager, ZV = ZendView
AR FR
ZR
ROUTER
Plates
Twig
ZV
RENDERER
AD Pimple ZS
DI CONTAINER
17. Ralf EggertRalf Eggert 1717 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Performance Fazit
AD = Aura.DI, AR = Aura.Router, FR = FastRoute, ZR = ZendRouter, ZS = ZendServiceManager, ZV = ZendView
FR
Schnellste
Variante
PlatesPimple
Traue keiner Statistik, die du nicht selber gefälscht hast! ;-)
ZR
ZF
Variante
ZVZS
19. Ralf EggertRalf Eggert 1919 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
ZendExpressive installieren I
20. Ralf EggertRalf Eggert 2020 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
ZendExpressive installieren II
21. Ralf EggertRalf Eggert 2121 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
ZendExpressive installieren III
22. Ralf EggertRalf Eggert 2222 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Skeleton Application
23. Ralf EggertRalf Eggert 2323 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Aufbau der Anwendung
bin
clear-config-cache.php
config
autoload
dependencies.global.php
dependencies.local.php.dist
local.php.dist
router.global.php
templates.global.php
zend-expressive.global.php
config.php
container.php
development.config.php.dist
pipeline.php
routes.php
data
cache
db
module
App
public
.htaccess
index.php
test
AppTest
...
vendor
bin
composer
zendframework
...
autoload.php
composer.json
composer.lock
26. Ralf EggertRalf Eggert 2626 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Modularität I
Modul Customer
Actions
Konfiguration
Templates
Formulare
Repositories
Entitäten
Storages
Services
Routing
Input-Filter
View-Helper
Paginierung
Navigation
27. Ralf EggertRalf Eggert 2727 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Modularität II
Modul CustomerApp Modul CustomerDomain
Action
Konfiguration
Templates
Formulare
Konfiguration
Repository
Entitäten
Storage
Services
Routing
Input-Filter
View-Helper
Paginierung
Navigation
28. Ralf EggertRalf Eggert 2828 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Modularität III
Modul
Customer
MwApp
Modul
Customer
Domain
Modul
Customer
Presentation
Modul
Customer
Console
Modul
Customer
Rest
Modul
Customer
MvcApp
29. Ralf EggertRalf Eggert 2929 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Modularität IV
Modul
Customer
MwApp
Modul
Customer
Domain
Modul
Customer
Presentation
Modul
Customer
Console
Modul
Customer
Rest
Modul
Customer
MvcApp
30. Ralf EggertRalf Eggert 3030 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Schichtenmodell (frei nach DDD)
Repository DatenbankAction
Presentation Layer Domain Layer Infrastructure LayerApplication Layer
Formular
33. Ralf EggertRalf Eggert 3333 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Ausführung Middleware-Aktion
HTTP
Request
HTTP
Response
Routing
Middleware
Action
Middleware
Authorization
Middleware
Dispatching
Middleware
34. Ralf EggertRalf Eggert 3434 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Beispiele für Action-Middleware
35. Ralf EggertRalf Eggert 3535 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Beispiel-Architektur
Routing
Action
Middleware
Application LayerPresentation Layer
Template
Factory RepositoryFormular
Domain Layer
36. Ralf EggertRalf Eggert 3636 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Action-Middleware für Anzeige
namespace CustomerAppAction;
use InteropHttpServerMiddlewareDelegateInterface;
use InteropHttpServerMiddlewareMiddlewareInterface
use CustomerDomainRepositoryCustomerRepository;
use PsrHttpMessageServerRequestInterface as Request;
use ZendDiactorosResponseHtmlResponse;
use ZendExpressiveTemplateTemplateRendererInterface;
class CustomerListAction implements MiddlewareInterface
{
public function process(
Request $request, DelegateInterface $delegate
) {
$customerList = $this->repository->getCustomerList();
$data = ['customerList' => $customerList];
return new HtmlResponse(
$this->renderer->render('customer-app::list', $data)
);
}
}
37. Ralf EggertRalf Eggert 3737 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Routing für Action-Middleware
use CustomerAppActionCustomerListAction;
use CustomerAppActionCustomerShowAction;
use InteropContainerContainerInterface;
use ZendExpressiveApplication;
/** @var ContainerInterface $container */
$container = require 'config/container.php';
$application = $container->get(Application::class);
$application->get(
'/customer',
CustomerListAction::class,
'customer-list'
);
$application->get(
'/customer/:id',
CustomerShowAction::class,
'customer-show'
)->setOptions(
['constraints' => ['id' => '[0-9]+']]
);
38. Ralf EggertRalf Eggert 3838 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Action-Middleware mit Formular
namespace CustomerAppAction;
/* ... */
class CustomerCreateHandleAction implements MiddlewareInterface
{
public function process(
Request $request, DelegateInterface $delegate
) {
$this->form->setData($request->getParsedBody());
if ($this->form->isValid()) {
$this->repository->saveCustomer($this->form->getData());
return new RedirectResponse(
$this->router->generateUri('customer-list')
);
}
return $delegate->process($request);
}
}
39. Ralf EggertRalf Eggert 3939 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Erweitertes Routing
use CustomerAppActionCustomerListAction;
use CustomerAppActionCustomerShowAction;
use InteropContainerContainerInterface;
use ZendExpressiveApplication;
$container = require 'config/container.php';
$application = $container->get(Application::class);
$application->get(
'/customer/create',
CustomerCreateFormAction::class,
'customer-create-form'
);
$application->post(
'/customer/create',
[
CustomerCreateHandleAction::class,
CustomerCreateFormAction::class,
],
'customer-create-handle'
);
40. Ralf EggertRalf Eggert 4040 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
RESTful Action-Middleware
namespace CustomerRestAction;
use InteropHttpServerMiddlewareDelegateInterface;
use InteropHttpServerMiddlewareMiddlewareInterface
use CustomerDomainRepositoryCustomerRepository;
use PsrHttpMessageServerRequestInterface as Request;
use ZendDiactorosResponseJsonResponse;
use ZendExpressiveTemplateTemplateRendererInterface;
class CustomerGetAction implements MiddlewareInterface
{
public function process(
Request $request, DelegateInterface $delegate
) {
$customerList = $this->repository->getCustomerList();
$data = ['customerList' => $customerList];
return new JsonResponse(data);
}
}
43. Ralf EggertRalf Eggert 4343 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Middleware-Pipeline
HTTP
Request
HTTP
Response
Routing
Middleware
Authorization
Middleware
Dispatching
Middleware
44. Ralf EggertRalf Eggert 4444 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Middleware-Pipeline
use I18nMiddlewareInternationalizationMiddleware;
use UserAuthMiddlewareAuthenticationMiddleware;
use UserAuthMiddlewareAuthorizationMiddleware;
use ZendExpressiveApplication;
use ZendExpressiveHelperServerUrlMiddleware;
use ZendExpressiveHelperUrlHelperMiddleware;
use ZendExpressiveMiddlewareNotFoundHandler;
use ZendStratigilityMiddlewareErrorHandler;
/** @var ContainerInterface $container */
$container = require 'config/container.php';
$application = $container->get(Application::class);
$application->pipe(ErrorHandler::class);
$application->pipe(ServerUrlMiddleware::class);
$application->pipeRoutingMiddleware();
$application->pipe(UrlHelperMiddleware::class);
$application->pipe(AuthenticationMiddleware::class);
$application->pipe(AuthorizationMiddleware::class);
$application->pipe(InternationalizationMiddleware::class);
$application->pipeDispatchMiddleware();
$application->pipe(NotFoundHandler::class);
45. Ralf EggertRalf Eggert 4545 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
Pipeline-Middleware Autorisierung
namespace UserAuthMiddleware;
/* ... */
class AuthorizationMiddleware implements MiddlewareInterface
{
public function process(
Request $request, DelegateInterface $delegate
) {
$result = $request->getAttribute(RouteResult::class, false);
if ($result === false) {
return $delegate->process($request);
}
if (!$this->rbac->isGranted($this->role, $this->permission)) {
throw new RuntimeException('Forbidden', 403);
}
return $delegate->process($request);
}
}
47. Ralf EggertRalf Eggert 4747 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
ZendMvc im Vergleich
Viele
Module
Erprobtes
Konzept
Leichte
Integration
Event
Manager
Gegenwart
Etwas weniger
performant Viel
Erfahrung
Bestands-
Projekte
Migration
einfach
(vom ZF2)
48. Ralf EggertRalf Eggert 4848 vonvon 5050
Middleware Anwendungen mit dem Zend Framework 3Middleware Anwendungen mit dem Zend Framework 3
ZendExpressive im Vergleich
Wenige
Module
Neues
Konzept
Schwerere
Integration
Middleware
Pipeline
Zukunft
Sehr
performant Wenig
Erfahrung
Für neue
Projekte
Migration
komplexer
(vom ZF2)