2010-02-16 69 views
1

我正在編寫我的第一個CakePHP應用程序,並且剛剛編寫密碼重置表單的第二部分,其中用戶收到包含該網站鏈接的電子郵件,以及何時點擊它,他們被要求輸入並確認一個新的密碼。在使用CakePHP提交表單提交時傳遞URL變量的問題FormHelper

的頁面的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="https://stackoverflow.com/users/reset_password_confirm/8"> 

的問題是用戶標識(本例中爲8)將被添加到表單操作中。這不是一個真正的問題在這裏,但我想通過哈希傳遞給我的控制器:

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

$static_hash現在填充了8,而不是從URL哈希值。

我知道我可以通過自己創建表單標籤而不是使用$form->create來解決這個問題,但是有沒有更好的方法來做到這一點?

回答

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

就明確設置PARAMS你不希望傳遞給nullfalse。不幸的是,這是一個蛋糕爲了自己的利益而過於聰明的例子。 ; O)

你也許還可以做這樣的事情發佈到再次在同一網址:

$form->create('User', $this->here); 
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 
} 

} 

希望這有助於:)