J'ai une entité personnalisée, qui dépend de l'entité utilisateur. En fait, c'est tout de même selon que je sentais qu'il était logique d'afficher mon formulaire d'entité dans le formulaire de profil utilisateur:
Le problème que j'ai maintenant est le suivant; il y a 2 boutons de sauvegarde. Et s'il n'est pas assez mauvais, le bouton d'enregistrement pour l'utilisateur (celui du bas) ne fonctionne même plus et le bouton d'enregistrement d'étiquette blanche enregistre uniquement l'entité d'étiquette blanche.
Le formulaire est modifié dans le formulaire utilisateur comme ceci:
function whitelabel_form_user_form_alter(&$form, FormStateInterface $form_state) {
$whitelabel = WhiteLabel::load(1);
$whitelabel_form = \Drupal::service('entity.manager')
->getFormObject('whitelabel', 'default')
->setEntity($whitelabel);
$form['whitelabel'] = array(
'#type' => 'details',
'#title' => t('White label settings'),
'#open' => TRUE,
'form' => \Drupal::formBuilder()->getForm($whitelabel_form),
);
}
J'espérais mélanger certains paramètres dans le $whitelabel_form
tableau (qui fonctionnait dans Drupal 7), mais ce tableau est énorme et je n'ai pas pu trouver les boutons de soumission et le gestionnaire dont j'avais besoin.
La question est donc de savoir si cela peut être fait? Et quelle serait la manière recommandée de le faire?
Réponses:
Au lieu d'essayer de faire votre propre truc, vous devriez essayer le module Inline Entity Form . Ce module est conçu pour ce cas spécifique (création / modification d'entités dans des formulaires d'entité).
Je sais que beaucoup de travail a été fait pour améliorer le flux de travail dans Drupal Commerce, ce qui signifie que cela devrait bien fonctionner. Je ne l'ai pas testé moi-même, mais puisque Drupal Commerce en dépend également dans Drupal 8, il devrait déjà être assez stable.
Le module fonctionne en ajoutant un widget au champ de référence d'entité qui crée le formulaire, il devrait donc être à peu près plug and play. La seule exigence est que l'utilisateur ait une référence à votre entité personnalisée.
la source
Je pense que cela devrait être possible. Malheureusement, je n'ai pas le temps d'écrire du code aujourd'hui, cependant, je pense que vous devez garder les choses suivantes à l'esprit:
form_id
etform_build_id
utilisés par Drupal pour reconnaître le formulaire qui a été soumis.unset($sub_form['actions'])
avant d'ajouter le sous-formulaire au formulaire principal.#tree
pour le formulaire afin que vous puissiez intercepter les valeurs de sous-formulaire dans une poche distincte dans la variable POST. Exemple,$form['#tree'] = TRUE; $form['sub-form'] = $sub_form;
cela rendra vos valeurs de sous-formulaire disponibles dans$form_state['values']['sub-form']
.sub-form
valeurs dans$form_state['values']
(j'espère que vous comprenez ce que je veux dire).J'espère que cela aide! Cela ressemble à un enfer d'une expérience! Bonne chance.
la source
form_build_id
,form_token
,form_id
etactions
fait disparaître le bouton et fait le travail « de forme extérieure » à nouveau. Je vais jouer avec cela un peu plus et vous laisser savoir comment cela a fonctionné.$form_state ['values']
(les clés des éléments de formulaire sont vides). Ce n'est probablement pas (encore) possible, mais j'espère comprendre cela un jour.La réponse théorique (celle qui ne fonctionne pas, mais c'est la plus proche que j'ai obtenue). Poster ici pour référence et un point de départ pour les autres.
Modifiez le formulaire utilisateur.
Soumettre le gestionnaire:
la source