Montag, 20. Januar 2014

URL Parameter übergabe in Zendframework 2 (ZF2)

Wenn man sich das Tutorial von ZF2 ansieht stellt man fest, das dort keine Parameter mit ?newparam=xxx übergeben werden.

Doch wie funktioniert das ganze dann?

Parameter die über die URL übergeben werden, werden durch das Routensystem vom Zendframework gesendet. Das laäuft wie folgt ab:

Jedem Parameter wird eine Aktion zugewiesen wie anlegen(add), ändern (edit) und löschen (delete).
Nach der Aktion, wird der dazugehörige Parameter notiert.
Das sieht dann in der Url so aus: album/edit/1

die Aktion wird im Controller einer Action zugeordnet, dadurch ist es zum einem möglich Suchmaschinen freundliche URL's zu generieren, auf der anderen Seite aber auch mit dem übergebenen Parameter gleich eine Aktion zu verbinden die dann ausgeführt wird.

So kann man dann gleich eine ID in der Session speichern oder wie im Fall des Tutorials ein Album ändern oder löschen.

Möchte man mehr als einen Parameter übergeben, muss man die Route entsprechend ändern.

moduleconfig.php:

'router' => array(
        'routes' => array(
            'album' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/album[/:action][/:id][/:newparam]', //Parameter einfügen
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                        'newparam'     => '[0-9]+', //prüfung des neuen Paramters
                    ),
                    'defaults' => array(
                        'controller' => 'Album\Controller\Album',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
    ),

mit $this->params('newparam') kann man nun wieder auf diesen neu eingefügten Parmeter Zugreifen.

Auf der Seite wo der Link erstellt wird sieht das dann so aus (Bsp.: index.phtml):

echo $this->url('adresses', array('action'=>'index', 'id' => $id, 'newparam' => 'xxx' ));


Durch diese Technik und dadurch das man nur das nötigste über die Url überträgt, sollte sich die Notwendigkeit Seiten als Canonical also gleichen Inhalts definieren zu müssen reduzieren oder bestenfalls sogar ganz vermeiden lassen.

Keine Kommentare:

Kommentar veröffentlichen