Wenn man mit einer Datenbank - Tabelle arbeitet die mit autoincrement arbeitet, möchte man oft wissen welche ID zu letzt eingefügt wurde.
Sofern man das TableGateway vom Zendframework2 benutzt genügt der Befehl $this->tableGateway->lastInsertValue; direkt nach dem ausführen des Datenbankbefehls.
Die Methode saveAlbum wie folgt abgeändert liefert dann immer die ID zurück:
public function saveAlbum(Album $album)
{
$data = array(
'artist' => $album->artist,
'title' => $album->title,
);
$id = (int)$album->id;
if ($id == 0) {
$this->tableGateway->insert($data);
$insertid = $this->tableGateway->lastInsertValue; //Autoincrement - wert abrufen
return $insertid; //und zurückliefern
} else {
if ($this->getAlbum($id)) {
$this->tableGateway->update($data, array('id' => $id));
} else {
throw new \Exception('Form id does not exist');
}
}
}
Vermutlich würde es return $this->tableGateway->lastInsertValue; auch tun.
Notizen rund um das Thema Programmierung mit dem Schwerpunkt PHP und Zend Framework 2 (ZF2)
Posts mit dem Label ZF2 werden angezeigt. Alle Posts anzeigen
Posts mit dem Label ZF2 werden angezeigt. Alle Posts anzeigen
Dienstag, 21. Januar 2014
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:
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.
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.
Abonnieren
Posts (Atom)