Problemas que passam variáveis ​​de URL na submissão de pós -formulário com CakePHP FormHelper

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

Pergunta

Estou escrevendo meu primeiro aplicativo CakePhp e apenas escrevendo a segunda parte de um formulário de redefinição de senha, onde um usuário recebeu um email contendo um link para o site e, quando clica, eles pediram para entrar e confirmar uma nova senha.

O URL da página é assim:

/users/reset_password_confirm/23f9a5d7d1a2c952c01afacbefaba41a26062b17

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

No entanto, isso produz uma forma como:

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

O problema é que o ID do usuário (8 neste caso) está sendo adicionado à ação do formulário. Não é realmente um problema aqui, mas quando quero passar pelo hash para o meu controlador:

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

$static_hash agora é preenchido com 8 em vez do hash do URL.

Eu sei que poderia resolver isso criando a tag de formulário em vez de usar $form->create Mas há uma maneira mais cakey de fazer isso?

Foi útil?

Solução

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

Apenas defina explicitamente parâmetros que você não deseja passar para null ou false. Infelizmente, esse é um caso em que o bolo tenta ser um pouco inteligente demais para o seu próprio bem. ; o)

Você provavelmente também poderia fazer algo assim para postar no mesmo URL novamente:

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

Outras dicas

Que tal passá -lo como um parâmetro em vez de dados de formulário:

<?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 no 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 isso ajude :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top