You are here

public function Kint::export in Devel 4.x

Same name and namespace in other branches
  1. 8.3 src/Plugin/Devel/Dumper/Kint.php \Drupal\devel\Plugin\Devel\Dumper\Kint::export()

Returns a string representation of a variable.

Parameters

mixed $input: The variable to export.

string $name: (optional) The label to output before variable, defaults to NULL.

Return value

string String representation of a variable.

Overrides DevelDumperInterface::export

File

src/Plugin/Devel/Dumper/Kint.php, line 48

Class

Kint
Provides a Kint dumper plugin.

Namespace

Drupal\devel\Plugin\Devel\Dumper

Code

public function export($input, $name = NULL) {
  ob_start();
  if ($name == '__ARGS__') {
    call_user_func_array([
      'Kint',
      'dump',
    ], $input);
    $name = NULL;
  }
  elseif ($name !== NULL) {

    // In order to get the correct access path information returned from Kint
    // we have to give a second parameter here. This is due to a fault in
    // Kint::getSingleCall which returns no info when the number of arguments
    // passed to Kint::dump does not match the number in the original call
    // that invoked the export (such as dsm). However, this second parameter
    // is just treated as the next variable to dump, it is not used as the
    // label. So we give a dummy value that we can remove below.
    // @see https://gitlab.com/drupalspoons/devel/-/issues/252
    \Kint::dump($input, '---temporary-fix-see-issue-252---');
  }
  else {
    \Kint::dump($input);
  }
  $dump = ob_get_clean();
  if ($name) {

    // Kint no longer treats an additional parameter as a custom title, but we
    // can add the required $name as a label at the top of the output.
    $dump = str_replace('<div class="kint-rich">', '<div class="kint-rich">' . $name . ': ', $dump);

    // Remove the output from the second dummy parameter. The pattern in [ ]
    // matches the minimum to ensure we get just the string to be removed.
    $pattern = '/(<dl><dt>[\\w\\d\\s<>\\/()]*"---temporary-fix-see-issue-252---"<\\/dt><\\/dl>)/';
    preg_match($pattern, $dump, $matches);
    if (!preg_last_error() && isset($matches[1])) {
      $dump = str_replace($matches[1], '', $dump);
    }
  }
  return $this
    ->setSafeMarkup($dump);
}