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.
3. Drei Fragen an das Publikum?
• Wer
– hat Erfahrungen mit dem Zend Framework 2?
– entwickelt an einem Zend Framework 2 Projekt?
– hat ein ZF2 Projekt im Live-Betrieb?
10. Better Practice: Model mit Model-Service
Controller
Manuela
Filter
Filter
Peter
Filter
Klaus
Entität
Hydrator
Model
Service
Input
Filter
Validator
Validator
Datenbank
Validator
11. Better Practice: View mit Model-Service
Controller
View
ViewSkripte
Response
ViewHelper
nur lesend!
Model
Service
12. Vorteile einer sauberen Trennung
• Alles hat seinen Platz
• Model-Service verwendbar von
– Webanwendung
– Cron-Job
– RESTful Webservice
– Javascript-Anwendung
• Datenvalidierung nicht an Formular gekoppelt
15. Zend Framework 2 Module
• Anwendungsspezifische Module
– Verzeichnis /module
• Fremdmodule
– Verzeichnis /vendor
• Unternehmensmodule
– Verzeichnis /corporate
– Oder Unternehmensname, z.B. /travello
• Module können aufeinander aufbauen
• Module können andere erweitern
16. Abhängigkeiten von ZF2 Modulen I
• Beispiel: Modul Application
• Funktionen
– Layout
– Fehlerseiten
– Module laden
– Konfiguration (z.B. Navigation)
• Zugriff für andere Module
– Ergänzende Konfiguration z.B. für ZendNavigation
• Zugriff auf andere Module
– Widgets über View-Helper aufrufen
17. Abhängigkeiten von ZF2 Modulen II
• Beispiel: Modul User
• Funktionen
– Registrierung
– Authentifizierung
– Autorisierung
– Event-Listener
• Zugriff für andere Module
– View-Helper: userIsAllowed und userWidget
– Controller-Plugin: userIsAllowed
• Direkten Zugriff auf Services vermeiden
18. Wiederverwendbarkeit
• Jedes Modul braucht eigene Routen
• .dist Datei für Konfiguration
– Für /config/autoload Verzeichnis
• Generalisiertes Markup im View verwenden
– Twitter Bootstrap
– Eigene CSS Struktur
• Abhängigkeiten zu anderen Modulen reduzieren
• Anderen Module Zugriff ermöglichen
– View-Helper
– Controller Plugins
39. Application-Management
• Management des Lebenszyklus der Anwendung
• Mehrere Stufen (DTAP)
– Development
– Testing
– Acceptance
– Production
• Weiche in /public/index.php
• Pro Stufe eigene Konfiguration
44. ZF2 Performance
• Modulkonfiguration cachen
– Closures nicht cachebar
– Achtung: Nur getConfig() wird gecached
• ClassMaps und TemplateMaps einsetzen
– Generator Skripte in /vendor/bin
• Möglichst wenige parallele Routen
• Fremdmodule
– EdpSuperluminal
– SpiffyNavigation
– OcraCachedViewResolver
45. Performancebremsen
• Größte Performancebremsen in Anwendung
– Ineffiziente Datenbankabfragen
– Nicht performante Berechnungen
– Gelesene Daten werden nicht gecached
• Generell
– Einsatz eines Frameworks immer langsamer als
prozedurale Skripte
• Tipp
– Eigenen Suchindex aufbauen
50. Probleme bei Migration vom ZF1
• Kein Tool für automatische Migration
• Kein Migration Layer
• Migration-Guide in ZF2 Doku unvollständig
• ZF1 bietet viele Freiheiten & verlangt keine 100%
feste Struktur wie andere Frameworks
• Allgemeingültige Schritt-für-Schritt-Anleitung für
alle Anwendungen schwer umsetzbar
• Kein ZF-spezifisches Problem
51. Migration ZF1 nach ZF2
• ZF1 und ZF2 parallel betreiben
• Weiche in .htaccess einrichten
• ZF2 Module müssen ZF1 Routing beachten
• Modul für Modul migrieren
• »Fat Models« leichter migrierbar
• »Fat Controller« schwerer migrierbar
• Weitere Quellen
– Artikel im PHP Magazin 6/2013 (Teil 1)
– IPC Spring Session: http://goo.gl/dgl8zH
52. Weiche in .htaccess
// Datei /public/.htaccess
RewriteEngine
on
# Slash am Ende entfernen
RewriteRule ^(.+)/$ http://%{HTTP_HOST}/$1 [R=301,L]
# Umschreiberegeln für ZF2
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^$ index.zf2.php
RewriteRule ^customer(.*)$ index.zf2.php
RewriteRule ^order(.*)$ index.zf2.php
RewriteRule ^cms(.*)$ index.zf2.php
# Umschreiberegeln für ZF1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.zf1.php