KB-PLUGIN-038: adiciona gotcha do registerClass com barra invertida inicial
isPluginItemType() rejeita '\GlpiPlugin\...' e registerClass falha silenciosamente — tab addtabon some sem erro em log (visto no butterfly). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
235e4679ac
commit
40c5fe82a9
1 changed files with 30 additions and 1 deletions
|
|
@ -124,10 +124,39 @@ ls /var/www/glpi/public/lib | grep -i codemirror # NÃO existe
|
|||
curl -s -o /dev/null -w "%{http_code}" http://localhost/plugins/<key>/pics/x.png
|
||||
```
|
||||
|
||||
## 5. Plugin::registerClass NUNCA com barra invertida inicial
|
||||
|
||||
`Plugin::registerClass('\GlpiPlugin\Meuplugin\Config', ...)` **falha
|
||||
silenciosamente** (retorna `false`): a primeira coisa que ele faz é
|
||||
`isPluginItemType($itemtype)`, cuja regex não aceita `\` inicial.
|
||||
Sintoma observado no butterfly: tab de config registrada via `addtabon`
|
||||
simplesmente não aparece em Configuração > Geral, sem nenhum erro em log.
|
||||
|
||||
```php
|
||||
// ERRADO — isPluginItemType() retorna false, registerClass vira no-op
|
||||
Plugin::registerClass('\GlpiPlugin\Butterfly\Config', ['addtabon' => ['Config']]);
|
||||
|
||||
// CERTO — ::class nunca inclui a barra inicial
|
||||
Plugin::registerClass(\GlpiPlugin\Butterfly\Config::class, ['addtabon' => ['Config']]);
|
||||
```
|
||||
|
||||
O mesmo vale para o valor de `glpi_tab`/`forcetab` em URLs: a chave da tab
|
||||
gerada pelo core é `<itemtype-sem-barra>$<n>` (ex.:
|
||||
`GlpiPlugin\Butterfly\Config$1`), então o link de `config_page` deve usar
|
||||
`rawurlencode('GlpiPlugin\Butterfly\Config') . '$1'`.
|
||||
|
||||
Diagnóstico rápido (kernel bootado):
|
||||
|
||||
```php
|
||||
var_dump(isPluginItemType('\GlpiPlugin\Meuplugin\Config')); // false = problema
|
||||
// e inspecionar CommonGLPI::$othertabs via Reflection para ver o que registrou
|
||||
```
|
||||
|
||||
## Regra para agentes
|
||||
|
||||
Ao portar plugin GLPI 9/10 → 11, fazer grep por: `CodeMirror`, `.tabs(`,
|
||||
`.dialog(`, `new .*FileVersion|__toString`, `'../plugins/`, e conferir se todo
|
||||
`.dialog(`, `new .*FileVersion|__toString`, `'../plugins/`,
|
||||
`registerClass('\\` (barra inicial), e conferir se todo
|
||||
asset estático referenciado por URL está dentro de `public/`. Cada acerto
|
||||
desses é quebra silenciosa (só aparece no console do browser ou como 404).
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue