J'ai un contrôleur dans mon module personnalisé. À l'intérieur de ce contrôleur, j'ai besoin de rendre tout un tas de choses différentes (du HTML de base, des formulaires multiples, etc.). Mon principal problème est que je ne sais pas comment
Mon code de contrôleur ressemble à ceci actuellement:
<?php
namespace Drupal\my_module\Controller;
use Drupal\Core\Controller\ControllerBase;
class SingleNodeProcessor extends ControllerBase {
public function processSingle($nid) {
$markup = '<div class="process-heading">' . $this->t('My custom Form Is below but there will be alot more html than just the form. So this is just an example.') . '</div>';
$form = $this->formBuilder()->getForm('Drupal\my_module\Form\MyFormClassGoesHere', $nid);
$markup .= $form; //this is a render array, how do I turn it to html so it can pass to #markup??
return [
'#type' => 'markup',
'#markup' => $markup,
];
}
}
Je pense que vous voulez retourner un tableau de rendu, au lieu d'un balisage. Parce que le from doit rester en tant que tableau de rendu, il vaut mieux le mettre pour que votre contenu soit au même format que dans l'autre sens. Dans votre exemple:
public function processSingle($nid) {
$build = [];
$build['heading'] = [
'#type' => 'markup',
'#markup' => '<div class="process-heading">' . $this->t('My custom Form Is below but there will be alot more html than just the form. So this is just an example.') . '</div>',
];
$build['form'] = $this->formBuilder()->getForm('Drupal\my_module\Form\MyFormClassGoesHere', $nid);
return $build;
}
Le problème est que les tableaux de rendu du type #markup exécutent le balisage résultant via le filtrage XSS, filtrant ainsi de nombreuses balises. ( voir la documentation de l'API de rend ). Dans ce cas, il filtrera les balises du formulaire.
La façon correcte de le faire, selon les documents:
Si votre balisage nécessite l'une des balises ne figurant pas dans cette liste blanche, vous pouvez implémenter un hook de thème et/ou une bibliothèque de ressources. Vous pouvez également utiliser la clé #allowed_tags pour modifier les balises filtrées.
La solution consiste donc à passer des balises à #allowed_tags dans le tableau de rendu ou (la meilleure solution), à utiliser #theme dans votre tableau de rendu au lieu du simple #markup.