使用CakePHP FormHelper在post表单提交中传递URL变量时出现问题

时间:2010-02-16 13:22:30

标签: forms cakephp post get form-helpers

我正在编写我的第一个CakePHP应用程序,我只是写了一个密码重置表单的第二部分,用户收到了一封包含该站点链接的电子邮件,当他们点击它时,他们被要求输入并确认新密码。

页面的网址如下:

/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">

问题是用户ID(在这种情况下为8)正被添加到表单操作中。这不是一个真正的问题,但是当我想将哈希传递给我的控制器时:

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

$static_hash现在填充了8而不是URL中的哈希值。

我知道我可以通过自己创建表单标记而不是使用$form->create来解决这个问题,但是这样做是否有更好的方式?

2 个答案:

答案 0 :(得分:1)

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

只需明确设置您不希望传递给nullfalse的参数。不幸的是,这种情况下,Cake试图为自己的利益而过于聪明。 ; O)

你可能也可以这样做,再次POST到同一个网址:

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

答案 1 :(得分:0)

如何将其作为参数而不是表单数据传递:

<?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
}

}

希望这有帮助:)