以下是解決此問題的一種方法。但是如果你使用一些表單輸入如文本形式,我建議你使用Ajax回調,因爲它會感覺更加動態。讓我知道你是否想要一個如何用Ajax回調來解決它的例子?
我想這裏的關鍵是,我使用$form_state['rebuild'] = true;
,這樣的形式被重建,不是很容易得到來自$form_state['values']
這裏的價值是代碼:
function example_form(array $form, array &$form_state)
{
$form['temp'] = array(
'#type' => 'value',
'#value' => array_key_exists('values', $form_state) ? $form_state['values']['temp'] + 1 : 1,
);
if (array_key_exists('values', $form_state) && $form_state['values']['temp'] == 1)
{
$form['message'] = array(
'#markup' => t('I only give you one warning'),
'#prefix' => '<p>',
'#suffix' => '</p>',
);
}
$form['submit_button'] = array(
'#type' => 'submit',
'#value' => t('Click Here!'),
);
return $form;
}
function example_form_validate(array $form, array &$form_state)
{
$form_state['rebuild'] = true;
}
function example_form_submit(array $form, array &$form_state)
{
if($form_state['values']['temp'] == 1) {
// I will not store anything
} else {
// now I will store it :)
}
}
嘗試稱它爲「 my_module_validate」。 :) – kwoxer
你想驗證什麼?這是一個文本框或類似的?然後,我建議您在離開textfield焦點時使用ajax回調,並用通知(可能是#markup的表單元素)更新表單。 如果你想在驗證鉤中擁有它,你可以將它存儲在$ formState中,你已經完成了驗證。如果你給我更多的信息,我會舉個例子。 – Triss