Problema passando variabili URL in forma dopo la presentazione con CakePHP FormHelper
-
20-09-2019 - |
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?
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:)