Tout d'abord, j'ai essayé de faire mes devoirs avant de venir ici. J'ai référencé this , et this et je ne parviens toujours pas à faire fonctionner mon code.
J'essaie simplement de définir une valeur par défaut dans un champ de formulaire de sélection sur un formulaire de configuration de bloc Drupal 8). Voici les parties pertinentes de mon code:
$options = array(
'test' => 'value',
'random' => 'string',
'kiwi' => 'pear',
);
$form['menu_selected'] = array(
'#type' => 'select',
'#title' => 'Test Title',
'#description' => 'Test Description',
'#options' => $options,
'#default_value' => 'random',
);
Le $ form est ensuite retourné comme d'habitude dans une construction de blocs. Tout le reste fonctionne sous la forme; Les options se remplissent, la description et le titre s'affichent. La seule chose qui ne fonctionne pas est la valeur par défaut. J'ai essayé d'utiliser des clés et des valeurs. J'ai même vu un commentaire qui disait d'utiliser '#value' au lieu de '#default_value' et cela n'a toujours pas fonctionné. Quelqu'un peut-il me dire ce que je fais mal? Je peux fournir plus de code si nécessaire.
Votre code est absolument correct, mais s'il ne fonctionne pas, essayez également une chose comme
$options = array(
'test' => 'value',
'random' => 'string',
'kiwi' => 'pear',
);
$default = 'random';
$form['menu_selected'] = array(
'#type' => 'select',
'#title' => 'Test Title',
'#description' => 'Test Description',
'#options' => $options,
'#default_value' => $default,
);
J'espère que cela vous sera utile.
Sur Drupal 8 formulaire, je rencontrais un problème avec Firefox qui mettait en cache la valeur d'un champ de sélection, sélectionné par l'utilisateur avant de rafraîchir la page.
Il remplaçait essentiellement la valeur #default_value du champ.
Ma solution était de désactiver la saisie semi-automatique des formulaires ( https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion ).
Vous pouvez le faire au niveau de l'entrée si c'est une entrée, mais comme c'était une sélection dans mon cas, je devais le faire au niveau du formulaire:
$form['#attributes']['autocomplete'] = 'off';