I figured out the key was not to use $form['#validate'][]
but $form['#after_build'][]
, like this
function my_module_form_alter(&$form, $form_state, $form_id) {
switch ($form_id)
{
case 'my_node_node_form':
$form['#after_build'][] = 'my_module_form_after_build';
break;
default:
// nothing
break;
}
}
function my_module_form_after_build($form, &$form_state) {
switch ($form['field_master_field']['#value']['value']) {
case '2':
$form['group_my_group']['field_three'][0]['value']['#required'] = TRUE;
case '1':
$form['group_my_group']['field_two'][0]['value']['#required'] = TRUE;
case '0':
$form['group_my_group']['field_one'][0]['value']['#required'] = TRUE;
break;
}
return $form;
}
Works a treat