Parameter

Oft werden GET- und POST-Parameter benötigt, hier soll ein kurzer Überblick über die einzelnen Übergabewege gegeben werden.

GET

GET-Parameter werden wohl am häufigsten benötigt. Da Zend einen Router zur Verfügung stellt, der alle Aufrufe auf die index.php umleitet ist jedoch eine Notation mit /module/controller/action?param=val nicht nötig und auch nicht erwünscht. Stattdessen ist die Übergabe mit /module/controller/action/param/val/param2/val2 möglich.

Im Controller können so übergebene Parameter folgendermaßen aufgerufen werden:

// Synonym für $this->getRequest()->getParam('param')
$param = $this->_getParam('param');

Hier ist darauf zu achten, dass als erstes benutzerdefinierte Parameter (im Script übergebene oder per /param/val-Notation übergebene), dann GET-Parameter (auf herkömmlichem Weg übergebene), dann POST-Parameter, dann COOKIE-Daten usw. durchgegangen werden und überall der Parameter gesucht wird (falls er nicht gefunden wurde). Will man nur Parameter von einzelnen Quellen, so müssen diese explizit angesprochen werden (z.B. über getQuery() oder getUserParam()).

POST

Eigentlich können POST-Paramter auch über die _getParam()-Methode geholt werden, jedoch besteht dann die Möglichkeit, dass der Benutzer einfach POST-Parameter per URL übergibt (was jedoch in jedem Falle einkalkuliert werden muss, da der Benutzer über XSS seine eigenen Werte an das Formular übergeben kann). Daher ist Folgendes zu verwenden:

$postParam = $this->getRequest()->getPost('param');

SESSION

Wenn das Script Daten in der Session speichern will, so sollte es dies immer über Namensbereiche tun, die klar benannt sind:

$namespacePurpose = new Zend_Session_Namespace('module_controller_purpose');

Will man prüfen, ob ein Namensbereich existiert, so muss dies vor der Instanziierung passieren:

if (!Zend_Session::namespaceIsset('module_controller_purpose'))
{
  // Namensbereich existiert noch nicht, also erstellen und Initialwerte übergeben (Ablaufzeit z.B.)
  $namespacePurpose = new Zend_Session_Namespace('module_controller_purpose');
  $namespacePurpose->setExpirationSeconds(3600);
}
else
{
  // Ansonsten existierte der Namensbereich bereits, aber er muss trotzdem instanziiert werden
  $namespacePurpose = new Zend_Session_Namespace('module_controller_purpose');
}

Löschen kann man Namensbereiche auf ähnliche Weise:

// Ändert jedoch nichts an der Variable $namespacePurpose!
Zend_Session::namespaceUnset('module_controller_purpose');

Um Werte im Namensbereich zu bearbeiten, kann wie mit einem stdClass-Objekt verfahren werden:

$namespacePurpose->property = $value;

Weitere Informationen zu Zend_Session

Weitere Informationen

Es sei wie immer die Zend Dokumentation empfohlen, im Bezug auf die Parameter besonders die Sektionen Das Request-Objekt, im Besonderen HTTP Requests.

 
code/parameter.txt · Zuletzt geändert: 15.05.2009 04:22 (Externe Bearbeitung)
 
Recent changes RSS feed Valid XHTML 1.0 Valid CSS Driven by DokuWiki