簡體   English   中英

在Drupal 7中,如何在驗證值之前更改提交表單的內容?

[英]In Drupal 7, how can I alter the contents of a submitted form before the values are validated?

我想做一些大致類似於(但不完全相同)的事情:我想創建一個Person內容類型,它具有一個SSN字段。 我想將SSN字段存儲為整數,但允許用戶輸入數字123-45-6789。 這意味着在驗證觸發之前,指出“ 123-45-6789”為無效輸入,我想刪除破折號並將其視為整數。

我試圖同時使用#value_callback函數和非默認驗證函數。 然后的問題是,盡管我可以強制驗證該值,但不變的值是傳遞給數據庫進行插入的值,該操作將失敗。 例如,這意味着盡管我可以強制Drupal將“ 123-45-6789”識別為“ 123456789”,但數據庫仍在傳遞“ 123-45-6789”,這當然會失敗。

一個顯而易見的解決方案是在將值提交到Web服務器之前,通過客戶端javascript進行更改。 我強烈希望避免使用此路線。

抱歉,如果我誤解了,但您應該可以執行以下操作:

function my_validation_handler(&$form, &$form_state) {
  if (passes_ssn_validation($form_state['values']['SSN'])) {
    // Changing the value in $form_state here will carry on over to the submission function
    $form_state['values']['SSN'] = convert_to_db_format($form_state['values']['SSN']);
  }
  else {
    form_set_error('SSN', 'The SSN was invalid');
  }
}

然后,您可以在表單構建或form_alter函數中使用$form['#validate'][] = 'my_validation_handler'附加該驗證函數。

希望能有所幫助

您應該使用hook_node_presave() 它允許您在將不同字段的值插入數據庫之前對其進行更改。 這是官方文檔:

http://api.drupal.org/api/drupal/modules--node--node.api.php/function/hook_node_presave/7

希望這可以幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM