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:
parent
411ffed535
commit
5b73169939
2 changed files with 87 additions and 2 deletions
20
index.json
20
index.json
|
|
@ -53,7 +53,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": "KB-INFRA-004",
|
"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",
|
"domain": "infrastructure",
|
||||||
"tags": [
|
"tags": [
|
||||||
"git",
|
"git",
|
||||||
|
|
@ -680,6 +680,24 @@
|
||||||
"severity": "medium",
|
"severity": "medium",
|
||||||
"path": "records/plugin-dev/KB-PLUGIN-035-glpi11-service-desk-kpi-data-model.md",
|
"path": "records/plugin-dev/KB-PLUGIN-035-glpi11-service-desk-kpi-data-model.md",
|
||||||
"summary": "id: KB-PLUGIN-035"
|
"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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
67
records/plugin-dev/KB-PLUGIN-036-glpi11-namespaces-twig.md
Normal file
67
records/plugin-dev/KB-PLUGIN-036-glpi11-namespaces-twig.md
Normal 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]].
|
||||||
Loading…
Reference in a new issue