Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'ai des problèmes avec l'élément Hash de Zend, il ne passe pas l'étape de validation
Voici ma classe de formulaire
$hash = new Zend_Form_Element_Hash("hash", "no_csrf", array("salt" => "unique")); ... $this->addElements(array($hash, ...));
Ca ne valide pas, donc j'ai ajouté des lignes pour sauvegarder un salt en session
$hash = new Zend_Form_Element_Hash("hash", "no_csrf", array("salt" => "unique")); $session = Zend_Registry::get("session") $session->no_csrf = md5(uniqid ("125fds8987f13", true)); Zend_Registry::set("session", $session); $hash->setValue($session->no_csrf );
Mais toujours rien.
Qu'est ce qui'l me manque?
Hors ligne
Bon, je n'arrive toujours à rien.
J'ai regardé un paquet de tutoriels sur comment utiliser l'élément hash dans un formulaire ZEND.
Y'a rien à faire, y'a un truc que je ne dois pas comprendre, ça ne valide jamais.
Y'a t'il quelque chose à faire au niveau du controller au moment de la validation?
Merci d'avance pour la moindre aide, elle sera bénéfique dans tous les cas
Hors ligne
Tu n'as rien à mettre en session, la validation se fait automatiquement. Voici comment j'ajoute (je passe par la fonction createElement mais tu peux le modifier en utilisant la création explicite) :
$hash = $this->createElement('Hash', 'hash'); $hash->setSalt(uniqid()) ->setIgnore(true); $this->addElement($hash);
Le setIgnore est facultatif, il te permet juste d'éviter de récupérer la valeur du hash quand tu fais un getValues() sur le form (le isValid te la validera quand même).
Normalement ton code devrait marcher aussi, par contre en assignant "unique" comme valeur, ton salt sera toujours identique, pas sûr que ça soit très utile . (à moins que unique soit une fonction PHP que j'ignore ?
)
Sinon, autre hypothèse : utilises-tu le décorateur ViewScript ? Auquel cas, il faut que tu affiches également l'élément dans ton fichier.
Hors ligne
Merci Bakura pour la réponse.
Ta solution ressemble à ce que j'ai déjà testé.
Mais par contre ton hypothèse sur le décorateur viewscript m'intéresse.
En effet, je l'utilise.
Par contre, je ne suis pas sur de comprendre ce que tu me demandes de faire.
Le fichier que tu mentionnes, c'est le script du formulaire? si oui comment je fais ça?
parce que dans le code HTML qui s'affiche à l'écran, j'ai bien
<input type="hidden" name="hash" value="" id="hash" />
Tu me parles surement de l'attribut value qui est vide.
Hors ligne
C'est pas normal qu'il soit vide, il doit avoir une valeur.
Ce que je veux dire par là, c'est qu'il faut bien l'afficher, en faisant un :
echo $this->element->hash->renderViewHelper(); ?>
dans ton script. (remplacer hash par le nom que tu as donné, en l'occurence no_csrf). Normalement tu devrais bien avoir un input de type hidden MAIS avec une valeur !
Hors ligne
En 1 mot :
merci !!
Hors ligne
De rien .
Hors ligne
Pages: 1