Search code examples
drupaldrupal-themingdrupal-9

Drupal 9: dd(), ddm() or drupal_dump() missing


I've installed D9 plus devel and created a custom theme (with all the necessary files, works nicely) and enabled all the necessary dev-centric settings, but it seems that the necessary functions like dd() or drupal_dump() are not found. I've already checked that everything related to the devel module (devel, devel generate, devel web profiler) is enabled in my Drupal.

Any help appreciated!


Solution

  • drupal_dump(), alias dd(), is not provided by devel, but by another module named twig_tweak. It requires Symfony's VarDumper component to work. You can install them using composer :

    composer require --dev symfony/var-dumper
    composer require drupal/twig_tweak
    drush en twig_tweak
    

    ddm() doesn't print anything to the screen but outputs a variable to a file named drupal_debug.txt in the site's temp directory.

    More on devel functions here.


    Long story

    In drupal 7.x and up to version 8.6.0, dd() was indeed provided by the devel module, but it was an alias for drupal_debug() (d7) and DevelDumperManager::debug() (d8), but it has been deprecated and replaced by ddm() since 8.6.0, because Symfony's VarDumper component already has a function named dd().

    Now to add further confusion, twig_tweak is using the alias dd() for drupal_dump() (source).

    Even if both functions end up calling Symfony's VarDumper::dump(), Symfony's dd means "dump and die" and is meant to immediately ends the execution of the script after dumping the variables, whereas twig_tweak's drupal_dump/dd does not.

    The exact same thing happens in Laravel : it uses Symfony's VarDumper and overrides its dd function with a function that doesn't behave the same, instead of using a different name.