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>
This commit is contained in:
Gemini 2026-06-29 18:56:10 -03:00
parent 411ffed535
commit 5b73169939
2 changed files with 87 additions and 2 deletions

View file

@ -53,7 +53,7 @@
},
{
"id": "KB-INFRA-004",
"title": "Forgejo onmind é o origin de desenvolvimento (todo trabalho dev é versionado lá)",
"title": "\"Forgejo onmind é o origin de desenvolvimento (todo trabalho dev é versionado lá)\"",
"domain": "infrastructure",
"tags": [
"git",
@ -680,6 +680,24 @@
"severity": "medium",
"path": "records/plugin-dev/KB-PLUGIN-035-glpi11-service-desk-kpi-data-model.md",
"summary": "id: KB-PLUGIN-035"
},
{
"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",
"path": "records/plugin-dev/KB-PLUGIN-036-glpi11-namespaces-twig.md",
"summary": "id: KB-PLUGIN-036"
}
]
}
}

View file

@ -0,0 +1,67 @@
---
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]].