- 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>
67 lines
2.3 KiB
Markdown
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]].
|