2011-02-07 為 form 增加新的 validation 規則

hook_form_alter() 本來是為了修改 form 的各種屬性
例如增加欄位, 修改欄位的預設值等等
但其實還可以增加 validation 規則和增加提交後的處理

增加 validation 規則:

<?php
function mymodule_form_alter(&$form,$form_state, $form_id) {
  if(
$form_id=='user_register') { //只是一個例子, 你可以填入需要的 form id
    //為 #validate 陣列增加一個元素, 元素的值就是新的 validate 函數名
   
$form['#validate'][] = 'mymodule_new_user_register_validation';
  }
}

//然後定義新的 validate 函數, 帶入兩個參數
function mymodule_new_user_register_validation($form, &$form_state) {
 
//$form_state['values'] 儲存用戶提交的數據
 
if(strpos('admin',$form_state['values']['username'])===false) {
   
//用戶名字不可以有 admin 的字眼
   
form_set_error('username', '用戶名字不可以有 admin 的字眼');
  }
}
?>

增加提交後的處理:

<?php
function mymodule_form_alter(&$form,$form_state, $form_id) {
  if(
$form_id=='user_register') {
   
//為 #submit 陣列增加一個元素, 元素的值就是新的提交後處理函數
   
$form['#submit'][] = 'mymodule_new_user_register_submit';
  }
}

//然後定義新的 validate 函數, 帶入兩個參數
function mymodule_new_user_register_submit($form, &$form_state) {
 
//$form_state['values'] 儲存用戶提交的數據
 
drupal_set_message('Welcome, '.$form_state['values']['username']);
}
?>

相關:
Drupal form API
hook_submit, hook_form_alter, hook_validate in Drupal 6.x

Google