knowledge-base/records/plugin-dev/KB-PLUGIN-004-plugin-hook-key-must-match-plugin-key.md

67 lines
2.3 KiB
Markdown

---
id: KB-PLUGIN-004
title: Chave do hook ADD_JAVASCRIPT deve ser o plugin key exato
domain: plugin-dev
tags:
- glpi
- glpi11
- hooks
- javascript
- setup.php
- plugin-key
status: active
severity: high
created_at: 2026-05-02
updated_at: 2026-05-02
applies_to:
- GLPI 11.x
- qualquer plugin que injete JS via PLUGIN_HOOKS
related_records:
- KB-PLUGIN-001
- KB-PLUGIN-002
---
# Contexto
Ao registrar arquivos JS em `setup.php` via `$PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT]`,
a chave do array deve ser exatamente o plugin key — o mesmo nome do diretório do plugin.
# Sintoma observável
- O arquivo JS do plugin nunca é incluído nas páginas do GLPI.
- Nenhum erro é exibido — a falha é silenciosa.
- Funcionalidades que dependem do JS simplesmente não funcionam.
# Causa raiz
`getPluginsJsScriptsFiles()` itera sobre `$PLUGIN_HOOKS['add_javascript']` e chama
`Plugin::isPluginActive($plugin)` usando a **chave** do array como nome do plugin.
Se a chave for diferente do plugin key real, `isPluginActive()` retorna `false`
e o arquivo JS é ignorado sem qualquer aviso.
```php
// ERRADO — chave diferente do plugin key
$PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT]['splititil_form'] = ['js/splititil-form.js'];
// CORRETO — chave = plugin key exato
$PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT]['splititil'] = ['js/splititil-form.js'];
```
# Para formulários públicos (anônimos)
Usar `ADD_JAVASCRIPT_ANONYMOUS_PAGE` além de `ADD_JAVASCRIPT` para que o JS
seja carregado em páginas de formulário acessadas sem login:
```php
$PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT]['splititil'] = ['js/splititil-form.js'];
$PLUGIN_HOOKS[Hooks::ADD_JAVASCRIPT_ANONYMOUS_PAGE]['splititil'] = ['js/splititil-form.js'];
```
# Validação padrão
1. Verificar no HTML renderizado se o `<script src="...splititil-form.js">` está presente.
2. Ou via `grep`: `curl -s http://localhost/glpi/ | grep "splititil-form"`.
# Regra para agentes
Ao registrar hooks de JS/CSS em `setup.php`, a chave do array **sempre** deve ser
o plugin key exato (= nome do diretório do plugin). Nunca usar sufixos, prefixos ou variações.
Para formulários públicos, registrar também em `ADD_JAVASCRIPT_ANONYMOUS_PAGE`.
# Classificação
- Tipo: Armadilha de configuração — falha silenciosa.
- Reutilização: obrigatória em qualquer plugin que injete assets no GLPI 11.