I have form alter for the user_register_form which is called. In this hook, I try to set a default value for a textfield but it doesn't work. I've tried all the syntax possible #default_value, #value, value, default_value, event in the attributes array.

This is my code.

function pre_registration_form_user_register_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
  $form['field_code_postal']['#cache']['max-age'] = 0;
  $form['field_code_postal']['#default_value'] = 'COUCOU';
  $form['field_code_postal']['#value'] = 'COUCOU';
  $form['field_code_postal']['value'] = 'COUCOU';
  $form['field_code_postal']['value']['#value'] = 'COUCOU';
  $form['field_code_postal']['value']['#default_value'] = 'COUCOU';
  $form['field_code_postal']['value']['value'] = 'COUCOU';
  $form['field_code_postal']['value']['default_value'] = 'COUCOU';
  $form['field_code_postal']['default_value'] = 'COUCOU';

  $form['field_code_postal']['#attributes']['value'] = 'COUCOU1';
  $form['field_code_postal']['#attributes']['#value'] = 'COUCOU2';
  $form['field_code_postal']['#attributes']['default_value'] = 'COUCOU3';
  $form['field_code_postal']['#attributes']['#default_value'] = 'COUCOU4';

How can I set a default value?

  • $form['field_code_postal'][LANGUAGE_NONE][0]['value']['#default_value']
    – m1r1k
    May 27 '16 at 11:25
  • Thanks for your answer. It doesn't work, FYI I'm using D8 not D7.
    – Greg__
    May 27 '16 at 11:56

According to this Documentation you can do something like

 $form['field_code_postal']['widget'][0]['value']['#default_value'] ='COUCOU1';

and for another guys help if you want to fill entity referenced field( also files are entity in Drupal >= 8) use

 $form['field_image']['widget'][0]['target_id']['#default_value']= $file; // 

For my case I wanted a default automatic node title for my custom content type and this is how i achieved it: After knowing the ID of the node_form I wanted to alter below hook_form_FORM_ID_alter(), I output the content that make up the title field by kint($form['title']); after this I was able to determine the array structure for the form title field and achieved it by the below code: $form['title']['widget'][0]['value']['#default_value'] = 'my custom node title'; (Drupal 8.4x)


In my case the below code worked perfectly in Drupal 8:

$form['field_idea_department']['widget'][0]['value']['#default_value'] = "default values";

To set the default value in your Hook_form_alter, make a dump of $form. You will see the array structure and what you need to target.

In my case with a webform form, actually I can do this :

 // "nom" is the field name
 $form['elements']['nom']['#default_value'] = 'hello world!;

Complete Hook_form_alter :

 * Implements hook_form_alter().
function my_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {
    if ($form_id == 'form_submission_lorem_add_form') {
        if (isset($form['elements']['nom'])) {
            $form['elements']['nom']['#default_value'] = 'hello world!';

Result :

enter image description here


In Drupal 8:

$form['field_name']['widget']['#default_value'][0] = 'value';

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.