1
0
mirror of https://github.com/maximebf/php-debugbar.git synced 2025-07-25 10:41:55 +02:00

Update interpolate on MessagesCollector (#572)

This commit is contained in:
erikn69
2024-02-10 04:55:11 -05:00
committed by GitHub
parent bfa8941060
commit cb11a0120b
2 changed files with 37 additions and 3 deletions

View File

@@ -195,7 +195,7 @@ class MessagesCollector extends AbstractLogger implements DataCollectorInterface
/**
* Interpolates context values into the message placeholders.
*
* @param $message
* @param string $message
* @param array $context
* @return string
*/
@@ -204,9 +204,24 @@ class MessagesCollector extends AbstractLogger implements DataCollectorInterface
// build a replacement array with braces around the context keys
$replace = array();
foreach ($context as $key => $val) {
$placeholder = '{' . $key . '}';
if (strpos($message, $placeholder) === false) {
continue;
}
// check that the value can be cast to string
if (!is_array($val) && (!is_object($val) || method_exists($val, '__toString'))) {
$replace['{' . $key . '}'] = $val;
if (null === $val || is_scalar($val) || (is_object($val) && method_exists($val, "__toString"))) {
$replace[$placeholder] = $val;
} elseif ($val instanceof \DateTimeInterface) {
$replace[$placeholder] = $val->format("Y-m-d\TH:i:s.uP");
} elseif ($val instanceof \UnitEnum) {
$replace[$placeholder] = $val instanceof \BackedEnum ? $val->value : $val->name;
} elseif (is_object($val)) {
$replace[$placeholder] = '[object ' . $this->getDataFormatter()->formatClassName($val) . ']';
} elseif (is_array($val)) {
$json = @json_encode($val);
$replace[$placeholder] = false === $json ? 'null' : 'array' . $json;
} else {
$replace[$placeholder] = '['.gettype($val).']';
}
}

View File

@@ -84,4 +84,23 @@ class DataFormatter implements DataFormatterInterface
$suffixes = array('B', 'KB', 'MB', 'GB', 'TB');
return $sign . round(pow(1024, $base - floor($base)), $precision) . $suffixes[(int) floor($base)];
}
/**
* @param object $object
* @return string
*/
public function formatClassName($object)
{
$class = \get_class($object);
if (false === ($pos = \strpos($class, "@anonymous\0"))) {
return $class;
}
if (false === ($parent = \get_parent_class($class))) {
return \substr($class, 0, $pos + 10);
}
return $parent . '@anonymous';
}
}