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

67 lines
2.3 KiB
Markdown

---
id: KB-PLUGIN-036
title: "GLPI 11 — Namespaces obrigatórios para componentes do core (Twig e RichText)"
domain: plugin-dev
tags:
- glpi11
- plugin
- twig
- namespaces
- templaterenderer
- richtext
- gotcha
status: active
severity: medium
created_at: 2026-06-29
updated_at: 2026-06-29
applies_to:
- 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.
```php
// 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.
```php
// 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]].