1
0
mirror of https://github.com/maximebf/php-debugbar.git synced 2025-05-04 13:57:55 +02:00

Create ObjectCountCollector for count class/objects (#571)

* Create ObjectCountCollector for count class/objects

* Added ObjectCountCollector demo
This commit is contained in:
erikn69 2024-02-10 04:46:40 -05:00 committed by GitHub
parent 8db056271d
commit 34462a1ee9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 116 additions and 0 deletions

View File

@ -16,6 +16,12 @@ $debugbar['messages']->addMessage('world', 'warning');
$debugbar['messages']->addMessage(array('toto' => array('titi', 'tata')));
$debugbar['messages']->addMessage('oups', 'error');
$classDemo = array('FirstClass', 'SecondClass', 'ThirdClass');
$debugbar->addCollector(new \DebugBar\DataCollector\ObjectCountCollector());
for ($i = 0; $i <=20; $i++) {
$debugbar['counter']->countClass($classDemo[rand(0, 2)]);
}
$debugbar['time']->startMeasure('render');
render_demo_page(function() {

View File

@ -0,0 +1,99 @@
<?php
namespace DebugBar\DataCollector;
use DebugBar\DataCollector\DataCollector;
use DebugBar\DataCollector\DataCollectorInterface;
use DebugBar\DataCollector\Renderable;
/**
* Collector for hit counts.
*/
class ObjectCountCollector extends DataCollector implements DataCollectorInterface, Renderable
{
/** @var string */
private $name;
/** @var string */
private $icon;
/** @var int */
protected $classCount = 0;
/** @var array */
protected $classList = [];
/**
* @param string $name
* @param string $icon
*/
public function __construct($name = 'counter', $icon = 'cubes')
{
$this->name = $name;
$this->icon = $icon;
}
/**
* @param string|mixed $class
* @param int $count
*/
public function countClass($class, $count = 1) {
if (! is_string($class)) {
$class = get_class($class);
}
$this->classList[$class] = ($this->classList[$class] ?? 0) + $count;
$this->classCount += $count;
}
/**
* {@inheritDoc}
*/
public function collect()
{
arsort($this->classList, SORT_NUMERIC);
if (! $this->getXdebugLinkTemplate()) {
return ['data' => $this->classList, 'count' => $this->classCount, 'is_counter' => true];
}
$data = [];
foreach ($this->classList as $class => $count) {
$reflector = class_exists($class) ? new \ReflectionClass($class) : null;
if ($reflector && $link = $this->getXdebugLink($reflector->getFileName())) {
$data[$class . '<a href="' . $link['url'] . '" class="phpdebugbar-widgets-editor-link"></a>'] = $count;
} else {
$data[$class] = $count;
}
}
return ['data' => $data, 'count' => $this->classCount, 'is_counter' => true];
}
/**
* {@inheritDoc}
*/
public function getName()
{
return $this->name;
}
/**
* {@inheritDoc}
*/
public function getWidgets()
{
$name = $this->getName();
return [
"$name" => [
'icon' => $this->icon,
'widget' => 'PhpDebugBar.Widgets.HtmlVariableListWidget',
'map' => "$name.data",
'default' => '{}'
],
"$name:badge" => [
'map' => "$name.count",
'default' => 0
]
];
}
}

View File

@ -146,6 +146,17 @@ dl.phpdebugbar-widgets-kvlist {
cursor: pointer;
min-height: 17px;
}
.phpdebugbar-widgets-kvlist .phpdebugbar-widgets-editor-link {
margin-left: 8px;
color: #888;
}
.phpdebugbar-widgets-kvlist .phpdebugbar-widgets-editor-link:before {
content: "\f08e";
font-family: PhpDebugbarFontAwesome;
margin-left: 4px;
margin-right: 4px;
font-size: 12px;
}
/* -------------------------------------- */