2010-02-16 3 views
1

Je suis en train d'écrire ma première application CakePHP et j'écris juste la deuxième partie d'un formulaire de réinitialisation de mot de passe où un utilisateur a reçu un email contenant un lien vers le site. cliquez dessus, ils sont invités à entrer et confirmer un nouveau mot de passe.Problème lors de la soumission des variables d'URL avec CakePHP FormHelper

L'URL de la page est comme ceci:

/users/reset_password_confirm/23f9a5d7d1a2c952c01afacbefaba41a26062b17 

La vue est comme:

<?php echo $form->create('User', array('action' => 'reset_password_confirm')); ?> 
<?php 
    echo $form->input('password', array('label' => 'Password')); 
    echo $form->input('confirm_password', array('type' => 'password', 'label' => 'Confirm password')); 
    echo $form->hidden('static_hash'); 
?> 
<?php echo $form->end('Reset password'); ?> 

Cependant, cela produit une forme comme:

<form id="UserResetPasswordConfirmForm" method="post" action="https://stackoverflow.com/users/reset_password_confirm/8"> 

Le problème est le L'ID utilisateur (8 dans ce cas) est ajouté à l'action de formulaire. Ce n'est pas vraiment un problème, mais quand je veux passer par le hachage à mon contrôleur:

function reset_password_confirm($static_hash=null) { 
    // function body 
} 

$static_hash est maintenant peuplé de 8 plutôt que le hachage de l'URL.

Je sais que je pourrais résoudre cela en créant la balise de formulaire moi-même plutôt que d'utiliser $form->create mais y a-t-il une façon plus gélatine de le faire?

Répondre

1
$form->create('User', array('action' => '…', 'id' => false)); 

Tout explicitement mis params vous ne voulez pas à null ou passé false. C'est malheureusement un cas où Cake essaie d'être un peu trop intelligent pour son propre bien. ; O)

Vous pourriez probablement aussi faire quelque chose comme ceci à la poste à la même URL à nouveau:

$form->create('User', $this->here); 
0

Que diriez-vous faisant passer comme paramètre au lieu des données de formulaire:

<?php 
echo $form->create('User', array('action' => 'reset_password_confirm', $static_hash)); 
    echo $form->input('password', array('label' => 'Password')); 
    echo $form->input('confirm_password', array('type' => 'password', 'label' => 'Confirm password')); 
echo $form->end('Reset password'); 
?> 

et dans le contrôleur:

function reset_password_confirm($static_hash = null) { 

// Check if form is submitted 
if (!empty($this->data)) { 
    // if it submitted then do your logic 
} else { 
    $this->set('static_hash', $static_hash); // Else, pass the hash to the view, so it can be passed again when form is submitted 
} 

} 

Hope this aide :)

Questions connexes