E-Book, Deutsch, 87 Seiten
Reihe: shortcuts
Eggert Migration von ZF1 nach ZF2 - ein Überblick
1. Auflage 2014
ISBN: 978-3-86802-505-7
Verlag: entwickler.press
Format: EPUB
Kopierschutz: 6 - ePub Watermark
E-Book, Deutsch, 87 Seiten
Reihe: shortcuts
ISBN: 978-3-86802-505-7
Verlag: entwickler.press
Format: EPUB
Kopierschutz: 6 - ePub Watermark
Das Zend Framework 2 ist schon über ein Jahr alt, doch noch immer bleiben nicht wenige Entwickler beim Zend Framework 1. Vor diesem Hintergrund soll es im ersten Kapitel dieses shortcuts darum gehen, wie Sie Ihre ZF1-Anwendung schrittweise zum Zend Framework 2 migrieren können. Zur Illustration hierfür dienen kleine Beispielanwendungen, Voraussetzung ist, dass Sie sich mit dem ZF2 sowie mit Git und GitHub auskennen. Kapitel 2 beleuchtet die Migration des MVC-Layers für das Blog-Modul und die Migration der Authentifizierung und Autorisierung. Abschließend erfolgt ein Ausblick auf das für Quartal 3 2014 erwartete ZF3.
Autoren/Hrsg.
Weitere Infos & Material
2 Die Migration des MVC-Layers Im ersten Kapitel sind wir auf die Gründe eingegangen, die für und gegen eine Migration vom ZF1 auf das ZF2 sprechen, und haben die Probleme bei einer Migration skizziert. Jetzt geht es unter anderem um die Migration des MVC-Layers. Als Basis für unsere Migration hatten wir eine ZF1-Anwendung [1] genommen, die alle wesentlichen Bestandteile einer ZF1-Applikation enthielt. Wir haben die SkeletonApplication installiert und damit begonnen, die Startseite zu migrieren. Dabei haben wir Layout, Navigation, Translator, Autoloading sowie das View-Skript migriert und einen CompatibilityListener für Migration von ZF1-Konfigurationseinstellungen eingerichtet. Der Zwischenstand ist auf GitHub zu finden [3] und wir befinden uns dort auf dem Stand des step3-Branches. In diesem Kapitel werden wir uns um die Migration des MVC-Layers für das Blog-Modul kümmern. Das betrifft das Routing, die Navigation, die Action-Controller, die View-Skripte und View-Helper. Außerdem werden wir uns um die Migration der Authentifizierung und Autorisierung kümmern. Zu guter Letzt wird der Model-Layer für das Modul mit all seinen Komponenten migriert. Und dann ist da ja auch noch das User-Modul. Hinweis Die Listings in diesem Kapitel finden Sie auch zusätzlich auf: GitHub unter https://github.com/PHPMagazin/PHP-Magazin-2.2014 Dafür machen wir nun genau an der Stelle weiter, an der wir beim letzten Mal aufgehört haben. Zur Erinnerung: Wir beziehen uns auf das Repository für die Migration [2] und steigen wieder beim step3-Branch ein: cd /home/devhost/dev.zf2migration.de
git checkout step3 Schritt 4: MVC-Layer für Blog-Modul migrieren Um den MVC-Layer für das Blog-Modul zum ZF2 portieren zu können, müssen wir folgende Teilschritte umsetzen: Routing migrieren Action-Controller migrieren View-Skripte migrieren View-Helper migrieren Navigation migrieren Services sauber injizieren Adminbereich für Blog migrieren Schritt 4a: Routing migrieren Zuerst müssen wir erneut die .htaccess-Datei anpassen, damit alle Anfragen für das Blogmodul zukünftig durch die ZF2-Applikation verarbeitet werden können (Listing 2.1). Das betrifft alle Routen, die mit einem Sprachschlüssel gefolgt von /blog, /beitrag, /kategorie oder /nutzer beginnen. Danach müssen die vier Routen in der Datei /module/Blog/config/module.config.php angelegt werden (Listing 2.2). Die vier Routen lassen sich sicherlich noch optimieren. Sollte die URL-Struktur bei der Migration geändert werden, müssen Sie sicherstellen, dass die alten Routen zumindest für eine Übergangszeit funktionieren und auf die neuen Routen umleiten. Dabei setzen Sie auch den entsprechenden HTTP-Statuscode. Für unsere Migration wollen wir die Struktur jedoch so beibehalten. [...]
# Umschreiberegeln für das Zend Framework
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^$|^en$ index.zf2.php
RewriteRule ^application(.*)$ index.zf2.php
RewriteRule ^(de|en)/blog|beitrag|kategorie|nutzer(.*)$ index.zf2.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /index.zf1.php
[...] Listing 2.1 return array(
'router' => array(
'routes' => array(
'blog' => array(
'type' => 'Segment',
'options' => array(
'route' => '/:lang/blog[/:page]',
'defaults' => array(
'__NAMESPACE__' => 'Blog\Controller',
'lang' => 'de',
'controller' => 'index',
'action' => 'index',
),
'constraints' => array(
'lang' => '(de|en)',
'page' => '[0-9]*',
),
),
),
'blog-article' => array(
'type' => 'Segment',
'options' => array(
'route' => '/:lang/beitrag/:url',
'defaults' => array(
'__NAMESPACE__' => 'Blog\Controller',
'language' => 'de',
'controller' => 'index',
'action' => 'show',
),
'constraints' => array(
'lang' => '(de|en)',
'url' => '[a-z0-9-]*',
),
),
),
'blog-category' => array(
'type' => 'Segment',
'options' => array(
'route' => '/:lang/kategorie/:url[/:page]',
'defaults' => array(
'__NAMESPACE__' => 'Blog\Controller',
'language' => 'de',
'controller' => 'index',
'action' => 'category',
),
'constraints' => array(
'lang' => '(de|en)',
'url' => '[a-z0-9-]*',
'page' => '[0-9]*',
),
),
),
'blog-user' => array(
'type' => 'Segment',
'options' => array(
'route' => '/:lang/nutzer/:url[/:page]',
'defaults' => array(
'__NAMESPACE__' => 'Blog\Controller',
'language' => 'de',
'controller' => 'index',
'action' => 'user',
),
'constraints' => array(
'lang' => '(de|en)',
'url' => '[a-z0-9-]*',
'page' => '[0-9]*',
),
),
),
),
),
); Listing 2.2 Wenn Sie jetzt den URL http://dev.zf2migration.de/de/blog aufrufen, sollten Sie die Fehlermeldung „Page not found. The requested controller could not be mapped to an existing controller class.“ erhalten. Diese Meldung besagt, dass der durch das Routing ermittelte Controller nicht gefunden werden konnte. Das Routing funktioniert damit schon einmal. Schritt 4b: Action-Controller migrieren Als Nächstes muss der Action-Controller für das Blog migriert werden. Dafür legen Sie zuerst die Datei /module/Blog/src/Blog/Controller/IndexController.php mit allen benötigten Verzeichnissen an. Darin legen Sie dann die entsprechende Klasse IndexController mit den vier Aktionsmethoden an, die wir benötigen (Listing 2.3). Zusätzlich müssen wir dem ControllerLoader den neuen Controller in der /module/Blog/config/module.config.php-Datei bekannt machen (Listing 2.4). Wenn Sie jetzt einmal die Seite im Browser aufrufen, sollten Sie eine Exception mit der Meldung „Unable to render template "blog/index/index"; resolver could not resolve to a file“ erhalten. Der Controller wird also geladen, nur das entsprechende View-Skript kann nicht gefunden werden. namespace Blog\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class IndexController extends AbstractActionController
{
public function categoryAction()
{
return new ViewModel(array());
}
public function indexAction()
{
return new ViewModel(array());
}
public function showAction()
{
return new ViewModel(array());
}
public function userAction()
{
return new ViewModel(array());
}
} Listing 2.3 return array(
'controllers' => array(
'invokables' => array(
...