Jak opět zobrazovat dostupné metody při použití modulů Drupal a Kint pro drupal 8 nebo Drupal 9

Pro Drupal 9 už nelze instalovat modul devel verzi 8.x-2.1. Místo něj nastupuje verze 4.0.0, která ale odstranila submodul Kint. Naštěstí existuje modul Devel Kint Extras, který vrací původní funkcionalitu.

Náš cíl je jednoduchý, pro vývoj se často hodí vidět dostupné metody nějakého objektu. Pro Drupal 8 to bylo snadné, to vše ukazoval modul Devel a submodul Kint. Nová verze kompatibilní s Drupal 9 už submodul Kint odstranila, viz. "Remove Kint module and create a kint dumper plugin in devel" https://www.drupal.org/project/devel/issues/2839515

V Release notes verze 4.0.0 https://www.drupal.org/project/devel/releases/4.0.0 se dočteme, že je třeba spustit composer require kint-php/kint, abychom dostali kint zpátky, ale je funguje jen napůl, jelikož takto kint nám kint nevrací dostupné metody – funguje jako klasický dump.

33Kint missing methods

Naštěstí tohle vše řeší modul nový modul Devel Kint Extras https://www.drupal.org/project/devel_kint_extras.

Instalace a konfigurace

Takže si nainstalujeme oba dva moduly Devel I Devel Kint Extras, ideálně přes composer. Druhý jmenovaný automaticky stáhne i potřebný projekt kint-php.

V tomto okamžiku jsem narazil na problém, že jsem měl předtím development verzi 4.x-dev modulu Devel, a po změně na 4.0.0 jsem v souboru devel.info.yml neměl vypsanou verzi modulu, kterou potřebuje Devel Kint Extras. Stačilo adresář web/modules/contrib/devel smazat, a znovu nahrát přes composer.

33Kint missing dependency

V nastavení "Devel settings" /admin/config/development/devel si už jen přepneme Dumper na "Kint extended" a je hotovo.

33Kint with methods

Pokud chceme vypsat například entitu uživatele, použijeme ksm($account); a dostaneme 

33Devel dumper

Pozor: musíme použít ksm() or dpm(), a ne kint().

Pro Kint existuje trik, jak omezit hloubku výpisů, aby nám nedošla pamět. Do souboru web/sites/default/settings.php (nebo settings.local.php ...) dáme následující řádky:

// Change kint max_depth setting.
if (class_exists('Kint')) {
  // Set the max_depth to prevent out-of-memory.
  \Kint::$max_depth = 4;
}
https://gist.github.com/JPustkuchen/a5f1eaeb7058856b7ef087b028ffdfeb#gi…

Závěr

Díky modulu Devel Kint Extras si do Drupalu 9 snadno vrátíme zpět to, na co jsme byli zvyklí z předchozí verze modulu Devel a Kint pro Drupal 8.