J'essaie de rendre un formulaire Web à l'intérieur d'un plugin de bloc. Je peux récupérer le formulaire Web avec succès à l'aide du code suivant
$webform = \Drupal::entityTypeManager()->getStorage('webform')->load('my_webform');
Cependant, je voudrais rendre ce formulaire. J'ai essayé d'utiliser
return $webform;
Mais je reçois l'erreur
Erreur fatale récupérable: l'argument 1 passé à Drupal\Core\Render\Element :: isEmpty () doit être du type tableau, objet donné
Je suppose que c'est parce que $ webform n'est pas formaté comme un tableau de rendu approprié, mais je ne sais pas comment faire. J'ai cherché des indices dans le code du module webform original, mais je n'ai rien trouvé.
Comment puis-je rendre un formulaire Web par programme? Et/ou existe-t-il un moyen de trouver dans le code d'un module ou d'une entité le moyen de rendre cette entité?
J'ai réussi à trouver une méthode pour la classe d'entité de formulaire Web appelée getSubmissionForm. Je l'ai trouvé dans le code du module webform dans src/Entity/Webform.php
Je l'ai invoqué comme ça
$webform = \Drupal::entityTypeManager()->getStorage('webform')->load('my_webform');
$webform = $webform->getSubmissionForm();
return $webform;
Qui a renvoyé le formulaire Web spécifié.
Vous pouvez également simplement renvoyer un tableau de rendu.
[
'#type' => 'webform',
'#webform' => 'my_webform',
'#default_data' => [
'nid' => 10
]
]
Matt répond pour moi, mais si vous voulez avoir une structure de thème plus complète avec lui, vous feriez mieux d'utiliser:
$webform = \Drupal::entityTypeManager()->getStorage('webform')->load('my_webform');
$view_builder = \Drupal::service('entity_type.manager')->getViewBuilder('webform');
$build = $view_builder->view($webform);
return $build;
Pour rendre ce formulaire Web sous forme de tableau de rendu et l'ajouter à votre sortie
Pour rendre un Webform à l'intérieur d'un plugin Block, vous pouvez utiliser module Token Block pour cela. Il vous permettra de créer les jetons pour vos blocs.
Pour créer un bloc de formulaire Web, accédez à Disposition des blocs , puis Placez a bloc, puis cochez la case Créez le jeton pour ce bloc pour le bloc. Le formulaire Web spécifique doit maintenant être disponible sous forme de bloc.
Voici l'exemple pour rendre manuellement le bloc de formulaire Web créé ci-dessus:
$block = BlockViewBuilder::lazyBuilder('mywebform', 'full', 1);
$block_content = render($block);