Drupal 6には、カスタムフォーム検証関数があります。ここで、
form_set_error()
を呼び出します。検証は正常に機能し、エラーが設定されます。問題は、フォームが再構築されるときにフィールドBの値が保持されないことです。フィールドBは空のままです。検証後(エラーが設定されている場合)にフィールドBの値を保持して、ユーザーが適切な長さまで簡単に編集できるようにします。
私の検証関数は次のようになります:
function myform_validate($form, &$form_state) {
if (empty($form_state['values']['field_b']['0']['value'])) {
$form_state['values']['field_b']['0']['value'] = $form_state['values']['field_a']['0']['value'];
}
if (strlen($form_state['values']['field_b']['0']['value']) > 260) {
form_set_error('field_b', 'Text in field b is too long');
}
}
}
}
フォームが再構築されるときにフィールドBの値を保持する方法に関する提案はありますか?
検証コールバック内からフォームの値を設定する場合は、 form_set_value のようなものを使用する必要があります。上記の方法で直接割り当てられた値は保持されませんが、その関数はうまくいくはずです!これは、特にこの目的を目的としています-検証フェーズ中にフォームの値を設定します。
例えば:
function myform_validate($form, &$form_state) {
if (empty($form_state['values']['field_b'])) {
// Note that the $form array - not $form_state - is used in the first parameter.
// The second parameter is the value you are setting.
// Third just pass the $form_state array itself, which will be altered by form_set_vaue().
form_set_value($form['field_b'], $form_state['values']['field_a'], $form_state);
}
if (strlen($form_state['values']['field_b']) > 260) {
form_set_error('field_b', 'Text in field b is too long');
}
}
}
}