2016-05-23 73 views
0

我向節點創建表單添加了驗證掛鉤。檢查表單是否失敗驗證

對於我的項目,我只需要驗證一次:基本上我只是檢查一個值是否已經存在於數據庫中,並且我將它通知給用戶。如果用戶仍然提交表單,我必須添加它。

我願做這樣的事情:

if (form_did_not_fail_validation_before) { 
    $form['#validate'][] = 'my_module_validation_hook'; 
} 
在我hook_form_alter

,使驗證掛鉤只在第一次調用。

我無法找到一種方法來檢查表單是否已驗證失敗,有什麼想法?

+0

嘗試稱它爲「 my_module_validate」。 :) – kwoxer

+0

你想驗證什麼?這是一個文本框或類似的?然後,我建議您在離開textfield焦點時使用ajax回調,並用通知(可能是#markup的表單元素)更新表單。 如果你想在驗證鉤中擁有它,你可以將它存儲在$ formState中,你已經完成了驗證。如果你給我更多的信息,我會舉個例子。 – Triss

回答

0

以下是解決此問題的一種方法。但是如果你使用一些表單輸入如文本形式,我建議你使用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 :) 
    } 
}