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:
parent
8db056271d
commit
34462a1ee9
@ -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() {
|
||||
|
99
src/DebugBar/DataCollector/ObjectCountCollector.php
Normal file
99
src/DebugBar/DataCollector/ObjectCountCollector.php
Normal 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
|
||||
]
|
||||
];
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
/* -------------------------------------- */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user