From 5b731699391818082aa41879d7a2c35e68c212c9 Mon Sep 17 00:00:00 2001 From: Gemini Date: Mon, 29 Jun 2026 18:56:10 -0300 Subject: [PATCH] =?UTF-8?q?kb:=20corrige=20KB-PLUGIN-032=20=C3=B3rf=C3=A3o?= =?UTF-8?q?=20->=20KB-PLUGIN-036=20(namespaces=20Twig/RichText)=20e=20norm?= =?UTF-8?q?aliza=20index?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- index.json | 22 +++++- .../KB-PLUGIN-036-glpi11-namespaces-twig.md | 67 +++++++++++++++++++ 2 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 records/plugin-dev/KB-PLUGIN-036-glpi11-namespaces-twig.md diff --git a/index.json b/index.json index 2ac99b2..40c9928 100755 --- a/index.json +++ b/index.json @@ -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" } ] -} \ No newline at end of file +} diff --git a/records/plugin-dev/KB-PLUGIN-036-glpi11-namespaces-twig.md b/records/plugin-dev/KB-PLUGIN-036-glpi11-namespaces-twig.md new file mode 100644 index 0000000..69f20e7 --- /dev/null +++ b/records/plugin-dev/KB-PLUGIN-036-glpi11-namespaces-twig.md @@ -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 `

` e `
` (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]].