2010-02-16 4 views
1

Я пишу свое первое приложение CakePHP и просто пишу вторую часть формы сброса пароля, когда пользователь получил письмо, содержащее ссылку на сайт, и когда они щелкните по нему, и им будет предложено ввести и подтвердить новый пароль.Проблема передачи переменных URL-адреса при отправке формы с помощью CakePHP 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 вы не хотите, передается null или false. Это, к сожалению, случай, когда Cake пытается быть слишком умным для собственного блага. ; О)

Вы могли бы также сделать что-то вроде этого, чтобы POST к тому же URL снова:

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

} 

Надежда это поможет :)