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

2.3 KiB

id title domain tags status severity created_at updated_at applies_to related_records
KB-PLUGIN-004 Chave do hook ADD_JAVASCRIPT deve ser o plugin key exato plugin-dev
glpi
glpi11
hooks
javascript
setup.php
plugin-key
active high 2026-05-02 2026-05-02
GLPI 11.x
qualquer plugin que injete JS via PLUGIN_HOOKS
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.

// 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:

$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.