Frage

Ich schreibe meine erste CakePHP Anwendung und schreibe nur den zweiten Teil eines Passwort-Reset-Formulars, in dem ein Benutzer eine E-Mail einen Link zu der Website erhalten hat, enthält, und wenn sie es klicken werden sie gebeten, einzugeben und zu bestätigen ein neues Passwort ein.

Die URL der Seite, ist wie folgt:

/users/reset_password_confirm/23f9a5d7d1a2c952c01afacbefaba41a26062b17

Der Blick ist wie:

<?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'); ?>

Jedoch erzeugt dies eine Form wie:

<form id="UserResetPasswordConfirmForm" method="post" action="/users/reset_password_confirm/8">

Das Problem ist, die Benutzer-ID (8 in diesem Fall) hinzugefügt, um die Formularaktion wird. Es ist nicht wirklich ein Problem hier, aber wenn ich will durch den Hash zu meinem Controller weitergeben müssen:

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

ist $static_hash jetzt mit 8 statt der Hash aus der URL ausgefüllt.

Ich weiß, dass ich dies aus mir, indem Sie den Formular-Tag anstatt $form->create sortieren könnte, aber ist es eine cakey Art und Weise, dies zu tun?

War es hilfreich?

Lösung

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

Just explizit params Sie wollen nicht zu null oder false weitergegeben. Dies ist leider ein Fall, in dem Kuchen versucht ein wenig zu intelligent für ihre eigenen, gut zu sein. ; O)

Sie könnten wahrscheinlich auch wieder auf die gleiche URL zu POST etwas tun:

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

Andere Tipps

Wie sei es als Parameter an Stelle von Formulardaten übergeben:

<?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');
?>

und in der Steuerung:

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 diese Hilfe:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top