Domanda

sto scrivendo la mia prima applicazione CakePHP e sto solo scrivendo la seconda parte di una forma di reimpostazione password in cui un utente ha ricevuto una e-mail contenente un link al sito e quando fanno clic che hanno chiesto di inserire e confermare una nuova password.

L'URL della pagina è come questo:

/users/reset_password_confirm/23f9a5d7d1a2c952c01afacbefaba41a26062b17

La vista è simile:

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

Tuttavia, questo produce una forma come:

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

Il problema è l'ID utente (8 in questo caso) è stato aggiunto all'azione forma. Non è davvero un problema qui, ma quando voglio passare attraverso il cancelletto al mio controller:

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

$static_hash è ora popolata da 8 piuttosto che l'hash dal URL.

So che avrei potuto risolvere la questione con la creazione del modulo etichettare me stesso piuttosto che utilizzare $form->create ma c'è un modo più cakey di fare questo?

È stato utile?

Soluzione

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

Basta impostare in modo esplicito params che non si desidera passato a null o false. Questo purtroppo è un caso in cui torta cerca di essere un po 'troppo intelligente per il suo bene. ; O)

Si potrebbe forse anche fare qualcosa di simile qui per spedire allo stesso URL di nuovo:

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

Altri suggerimenti

Che ne dite di passare come parametro invece di dati dei moduli:

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

e nel controllore:

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
}

}

Spero che questo aiuto:)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top