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
|
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
|
## Regra para agentes
|
||||||
|
|
||||||
Ao portar plugin GLPI 9/10 → 11, fazer grep por: `CodeMirror`, `.tabs(`,
|
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
|
asset estático referenciado por URL está dentro de `public/`. Cada acerto
|
||||||
desses é quebra silenciosa (só aparece no console do browser ou como 404).
|
desses é quebra silenciosa (só aparece no console do browser ou como 404).
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue