2010-01-04 9 views
2

Disons que je l'URI de la demande suivante:/contrôleur/action/filtre //Zend Framework: Obtenir un vide param

Quand j'appelle $ this -> _ getParam ('filtre') dans le contrôleur, il sera retourne NULL. Cependant, je veux qu'il renvoie une chaîne vide. Est-ce que je manque quelque chose d'évident?

Répondre

0

_getParam() peut prendre un deuxième argument facultatif contenant une valeur de retour par défaut. Voir la note ici: http://framework.zend.com/manual/en/zend.controller.action.html#zend.controller.action.accessors

Donc, $this->_getParam('filter','') devrait probablement faire ce que vous avez besoin.

Modifier: merci pour la clarification, gotcha. Je ne suis pas sûr qu'il y ait une façon particulièrement propre de faire ce que vous voulez - en regardant le code Zend_Controller_Request_Abstract je peux le voir explicitement supprime la clé de la liste des paramètres si elle n'a pas de valeur, donc il n'y a pas de moyen facile de savoir si elle existe du contrôleur. Quelque chose comme ce qui suit va faire le travail, mais devient un peu moche (vous feriez mieux d'utiliser une valeur explicite 'reset' pour votre paramètre de filtre afin que vous puissiez le capturer d'une manière plus saine, plutôt qu'une chaîne vide, si c'est possible?).

// if '/filter/' is in the request URI, but has no value 
if (strpos($_SERVER["REQUEST_URI"],'/filter/') && !$this->_hasParam('filter')) 
{ 
    // code to reset filter 
} 
// if filter is in the request *and* has a value 
elseif ($this->_hasParam('filter')) 
{ 
    // code to use filter value from request 
} 
else 
{ 
    // code to get filter from session 
} 
+0

Je sais que le deuxième argument est une valeur par défaut. Cependant, lorsque le paramètre "filter" n'est pas défini dans l'URL, il renverra ''. Cela signifie que je ne peux pas vérifier si le paramètre a été donné en fonction de la valeur de retour. Lorsque le paramètre de filtre n'a pas été donné, il devrait obtenir le filtre de la session. Lorsque le paramètre de filtre est vide, il doit effacer le filtre. – sroes

+0

Je suis conscient que je pourrais le résoudre en vérifiant réellement le REQUEST_URI, mais j'espérais une solution plus élégante. Merci de souligner qu'il n'y a probablement pas de meilleur moyen. – sroes