ZF2 – ein Cookbook

In 3 Schritten einen URL-Shortener mit dem neuen Zend Framework 2 bauen [Schritt 3]
Kommentare

Gute Nachrichten für Zend-Framework-Entwickler und alle, die es werden wollen: Zend Framework ist am 6. September in der Version 2 erschienen. Und wer schon einmal in den Code reingeschaut hat oder einen Blick in die Doku geworfen hat, wird feststellen, dass sich doch einiges seit der ersten Version geändert hat. Grund genug, in einem Cookbook zu beschreiben, wie mit ZF2 losgelegt werden kann.

Zu Schritt 1 geht es hier.

Zu Schritt 2 geht es hier.

ZF2 – ein Cookbook

Der Artikel „ZF2 – ein Cookbook“ von Jan Burkl ist erstmalig erschienen im PHP Magazin 1.2013

Liste

Schön wäre es, die Einträge unseres URL/Pfad-Paars auch anzeigen zu können. Sollte aufgrund unserer ganzen Vorbereitung recht schnell gehen. Als Erstes fehlt uns eine Liste mit allen Einträgen der DB. Dazu modifizieren wir ein weiteres Mal unser Model und erweitern es um zwei Methoden (Listing 17).

Listing 17

public function setResultSetPrototype(ZhortyEntityTrim $entity) {
    if (!$this->entityHydrator) {
        throw new Exception('Hydrator for entity is not set');
    }
    $this->entity = $entity;
    $this->resultSetPrototype = new HydratingResultSet(
        $this->entityHydrator,
        $entity
   );
}
public function fetchAll()
{
    $resultSet = $this->select();
    return $resultSet;
}

Bitte auch folgendes use-Statement hinzufügen, damit die Klasse HydratingResultSet gefunden werden kann:

use ZendStdlibHydratorHydratorInterface as Hydrator;

Um an alle Elemente zu kommen, benutzen wir in fetchAll() ganz einfach die select()-Methode des TableGateways ohne weitere Parameter. Prinzipiell könnte optional die where-Bedingung als Argument übergeben werden. Brauchen wir hier aber nicht. Wir sehen auch eine neue setResultSetPrototype()-Methode. Diese ist zwar nicht unbedingt notwendig, nutzt aber den vorher gesetzten Hydrator, um aus einem „normalen“ Resultset ein Array von Entity-Objekten zu erstellen. Um die Entity schlussendlich auch zu nutzen, müssen die beiden folgenden Zeilen in der Module.php in das Closure zum Erstellen der $table-Instanz hinzugefügt werden. Damit wird die Entity mit dem Model verknüpft:

$table->setEntityHydrator($sm->get('ZhortyEntityTrimHydrator')); 
    $table->setResultSetPrototype($sm->get('ZhortyEntityTrim'));

Im Controller nutzen wir die fetchAll()-Methode des Models und geben das Ergebnis in einem Array zurück:

public function listAction()
    {
    $sm = $this->getServiceLocator();
    $model = $sm->get('ZhortyModelTrim');
    return array('trimlist' => $model->fetchAll());
}

In dem neuen View-Template view/zhorty/trim/list.phtml wird das Result-Array verarbeitet (Listing 18).

Listing 18


Original URI Trimmed Path
escapeHtml($entity->getOrigUrl());?> escapeHtml($entity->getTrimPath());?>

Da die Items ja Entities sind, kann z. B. der Original-URL mittels $item->getOrigUrl() ausgegeben werden. Und um diese Seite zu erreichen, wird natürlich ebenfalls eine eigene Route in der module.config.php benötigt (Listing 19).

Listing 19

'router' => array(
    'routes' => array(
        'zhorty-trim' => array(
            'type' => 'ZendMvcRouterHttpLiteral',
            'options' => array(
                'route'    => '/trim',
                'defaults' => array(
                   'controller' => 'ZhortyControllerTrim',
                   'action'     => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                 'zhorty-trim-list' => array(
                         'type'    => 'Segment',
                     'options' => array(
                         'route'    => '/list',
                         'defaults' => array(
                             'action' => 'list',
                         ),
                     ),
                 ),
             ),
         ),
     ),
 ),
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -