knowledge-base/records/plugin-dev/KB-PLUGIN-036-glpi11-namespaces-twig.md
Gemini 5b73169939 kb: corrige KB-PLUGIN-032 órfão -> KB-PLUGIN-036 (namespaces Twig/RichText) e normaliza index
- adiciona front matter completo ao record de namespaces (estava sem metadados)
- renomeia para o próximo ID livre (036), resolvendo a colisão de ID 032
- kb_check --fix: index.json sincronizado; kb_check: OK

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 18:56:10 -03:00

2.3 KiB

id title domain tags status severity created_at updated_at applies_to
KB-PLUGIN-036 GLPI 11 — Namespaces obrigatórios para componentes do core (Twig e RichText) plugin-dev
glpi11
plugin
twig
namespaces
templaterenderer
richtext
gotcha
active medium 2026-06-29 2026-06-29
plugins GLPI 11.x que renderizam Twig ou manipulam HTML do core

GLPI 11 — Namespaces obrigatórios para componentes do core (Twig e RichText)

A partir do GLPI 10.0+ e consolidado no GLPI 11, diversas classes utilitárias e componentes visuais do core deixaram o escopo global (global namespace) e passaram a exigir a importação estrita de seus respectivos namespaces.

O não uso dos namespaces corretos resulta em Attempted to load class "NomeDaClasse" from the global namespace.

1. TemplateRenderer (renderização de Twig)

Para renderizar formulários modernos usando a engine do Twig (arquivos .html.twig), a antiga chamada TemplateRenderer::getInstance()->display() (sem namespace) falha.

// Certo
\Glpi\Application\View\TemplateRenderer::getInstance()->display('@meuplugin/template.html.twig', [
    'variavel' => 'valor'
]);

Dica: também é possível declarar use Glpi\Application\View\TemplateRenderer; no topo do arquivo PHP.

2. RichText (limpeza e manipulação de HTML)

O GLPI frequentemente injeta tags HTML como <p> e <br> (geradas pelo TinyMCE) em campos de descrição (content). Para limpar essas tags antes de exibir em formulários externos ou APIs, use a classe RichText com seu namespace correto.

// Certo
$clean_text = \Glpi\RichText\RichText::getTextFromHtml($fields['content'], false, true, true);

Dica: também é possível declarar use Glpi\RichText\RichText; no topo do arquivo PHP.

Resumo de namespaces críticos para views

Classe antiga (global) Novo namespace GLPI 11 Propósito
TemplateRenderer \Glpi\Application\View\TemplateRenderer Renderizar interfaces em Twig
RichText \Glpi\RichText\RichText Remover/escapar tags HTML de descrições

Onde isso pegou na vida real

No plugin redmine, project.class.php quebrava com Attempted to load class "RichText"/"TemplateRenderer" from the global namespace até os usos serem qualificados com \Glpi\.... Relacionado: KB-PLUGIN-032.