Pregunta

Estoy escribiendo mi primera aplicación CakePHP y estoy escribiendo la segunda parte de una forma de restablecimiento de contraseña, donde un usuario ha recibido un correo electrónico con un enlace al sitio y cuando se haga clic en él se les pide que introduzca y confirme una nueva contraseña.

La url de la página es la siguiente:

/users/reset_password_confirm/23f9a5d7d1a2c952c01afacbefaba41a26062b17

La vista es como:

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

Sin embargo, esto produce una forma como:

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

El problema es que se está añadido a la acción forma el ID de usuario (8 en este caso). En realidad no es un problema aquí, pero cuando quiero pasar por el hash a mi controlador:

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

$static_hash se llena ahora con 8 más que el hash de la URL.

Sé que podría resolver esto mediante la creación de la forma etiquetar a mí mismo en lugar de utilizar $form->create pero hay una manera más cakey de hacer esto?

¿Fue útil?

Solución

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

Sólo hay que establecer explícitamente params que no desea que se pasan a null o false. Desgraciadamente, esto es un caso en el que la torta trata de ser un poco demasiado inteligente para su propio bien. ; O)

Probablemente se podría también hacer algo como esto para publicar en la misma dirección URL de nuevo:

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

Otros consejos

¿Qué pasa como un parámetro en lugar de los datos de formulario:

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

y en el controlador:

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
}

}

Espero que esto ayuda:)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top