View-Parameter, ungeordnete Parameter und POST
Teil 3, Kapitel 10. Eine View erhält ihre Eingaben aus drei Quellen: der Adresse, dem POST-Rumpf eines
Formulars und der Sitzung. Dieses Kapitel zeigt, wie jede davon ankommt, so wie eZModule::run() in
lib/ezutils/classes/ezmodule.php sie zerlegt, und wie Sie sie sicher lesen.
Geordnete Parameter
$ViewList['world'] = array( 'script' => 'world.php', 'params' => array( 'Name', 'Mood' ) );/hello/world/Ada/happy ergibt $Params['Name'] = 'Ada' und $Params['Mood'] = 'happy'. Ein fehlender Parameter
ist nicht gesetzt; lesen Sie ihn mit isset().
Ungeordnete Parameter
$ViewList['list'] = array( 'script' => 'list.php',
'params' => array(),
'unordered_params' => array( 'offset' => 'Offset', 'sort' => 'SortBy' ) );Die URL nennt sie in beliebiger Reihenfolge nach den geordneten Parametern. Beide Schreibweisen funktionieren:
| Adresse | $Params |
|---|---|
/hello/list/offset/20 | Offset = '20', SortBy = false |
/hello/list/(offset)/20/(sort)/name | Offset = '20', SortBy = 'name' |
Die erste Form wird mit den Pfadelementen abgeglichen; die zweite, in Klammern, ist ein Benutzerparameter, den der
Kernel auf den gleichnamigen ungeordneten Parameter abbildet. Ein Name am Ende der Adresse ohne Wert ergibt false,
„als wäre er nicht angegeben“.
Benutzerparameter
Jedes Paar /(name)/value der Adresse wird außerdem in $Params['UserParameters'] gesammelt, ob die View es
deklariert oder nicht. Inhalts-Views geben sie als $view_parameters an Templates weiter; so blättert /(offset)/10
durch einen Ordner. Der eZpedia-Artikel
"How to add view parameter support to your custom module view"
beschreibt denselben Mechanismus für ältere Versionen.
$userParameters = isset( $Params['UserParameters'] ) ? $Params['UserParameters'] : array();
$offset = isset( $userParameters['offset'] ) ? (int)$userParameters['offset'] : 0;
$tpl = eZTemplate::factory();
$tpl->setVariable( 'view_parameters', $userParameters );Alles aus der Adresse ist nicht vertrauenswürdig
Behandeln Sie jeden Parameter wie Text, den ein Fremder eingetippt hat:
| Wert | Vorgehen |
|---|---|
| eine ID | (int)$Params['ObjectID'], dann abrufen und prüfen, ob sie existiert |
| ein Offset oder Limit | (int) und begrenzen: max( 0, min( $offset, 10000 ) ) |
| ein Wort aus einer festen Liste | mit der Liste vergleichen: in_array( $sort, array( 'name', 'published' ), true ) |
| freier Text, der auf einer Seite erscheint | im Template maskieren: {$name|wash} |
| freier Text in SQL | nie direkt; verwenden Sie eZPersistentObject oder $db->escapeString() |
POST-Variablen
Verwenden Sie eZHTTPTool (lib/ezutils/classes/ezhttptool.php):
$http = eZHTTPTool::instance();
if ( $http->hasPostVariable( 'Comment' ) )
{
$comment = trim( (string)$http->postVariable( 'Comment' ) );
}
$page = (int)$http->postVariable( 'Page', 1 ); // with a fallback value
$fromQuery = $http->getVariable( 'q', '' ); // ?q=... of the addresspostVariable( $var, $fallbackValue = null ) gibt den Ersatzwert zurück, wenn die Variable fehlt.
Ziehen Sie die Aktionen des Moduls (single_post_actions, isCurrentAction(), siehe Module und Views)
dem Prüfen von Schaltflächennamen von Hand vor: Sie halten die View lesbar.
Die Sitzung
$http = eZHTTPTool::instance();
$http->setSessionVariable( 'MysiteHelloLast', $name );
$last = $http->hasSessionVariable( 'MysiteHelloLast' ) ? $http->sessionVariable( 'MysiteHelloLast' ) : null;
$http->removeSessionVariable( 'MysiteHelloLast' );Stellen Sie Sitzungsschlüsseln den Namen Ihrer Erweiterung voran. Legen Sie keine großen Daten oder Objekte in der Sitzung ab.
Nach einem POST weiterleiten
Eine View, die etwas geändert hat, endet mit einer Weiterleitung ($Module->redirectToView() oder redirectTo()),
damit ein Neuladen der Seite das Formular nicht erneut sendet.
Verwandte Seiten
- Zurück: Module und Views
- Weiter: Richtlinienfunktionen und Zugriffsprüfungen
- eZHTTPTool: Requests, Sitzungen und Weiterleitungen
- Sicherheit in Erweiterungen
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.