Проблема передачи переменных URL при отправке формы с помощью CakePHP FormHelper - PullRequest
1 голос
/ 16 февраля 2010

Я пишу свое первое приложение CakePHP и просто пишу вторую часть формы для сброса пароля, где пользователь получил электронное письмо со ссылкой на сайт, и когда он щелкнул по нему, его попросили ввести и подтвердить новый пароль.

URL страницы выглядит так:

/users/reset_password_confirm/23f9a5d7d1a2c952c01afacbefaba41a26062b17

Вид как:

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

Однако это приводит к такой форме:

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

Проблема в том, что идентификатор пользователя (в данном случае 8) добавляется в действие формы. Здесь это не проблема, но когда я хочу передать хэш своему контроллеру:

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

$static_hash теперь заполняется 8, а не хешем из URL.

Я знаю, что мог бы разобраться с этим, создав собственный тег формы, а не с помощью $form->create, но есть ли более легкий способ сделать это?

Ответы [ 2 ]

1 голос
/ 16 февраля 2010
$form->create('User', array('action' => '…', 'id' => false));

Просто явно задайте параметры, которые вы не хотите передавать null или false. К сожалению, это тот случай, когда Cake пытается быть слишком умным для своего блага. ; О)

Возможно, вы также можете сделать что-то подобное для POST с тем же URL-адресом:

$form->create('User', $this->here);
0 голосов
/ 16 февраля 2010

Как насчет передачи его в качестве параметра вместо данных формы:

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

и в контроллере:

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
}

}

Надеюсь, эта помощь:)

...