Problème passage des variables d'URL dans la soumission de formulaire de poste avec CakePHP FormHelper

StackOverflow https://stackoverflow.com/questions/2273132

Question

J'écris ma première application CakePHP et je simplement écrire la deuxième partie d'un mot de passe sous forme de remise à zéro lorsqu'un utilisateur a reçu un e-mail contenant un lien vers le site et quand ils cliquent, ils sont invités à entrer et à confirmer nouveau mot de passe.

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="/users/reset_password_confirm/8">

Le problème est l'identifiant de l'utilisateur (dans ce cas 8) est d'être ajouté à l'action de la forme. 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 pouvais résoudre tout cela en créant la forme moi-même balise plutôt que d'utiliser $form->create mais est-il un moyen plus cakey de le faire?

Était-ce utile?

La solution

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

Il suffit de définir explicitement params que vous ne souhaitez pas communiqués à null ou false. Ceci est malheureusement un cas où gâteau 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);

Autres conseils

Que diriez-vous passer comme paramètre au lieu de la forme de données:

<?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 cette aide:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top