[英]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.