Supports micro and classic app.
composer require --dev srgiz/phalcon-profiler
- PHP >= 8.0
- Phalcon >= 5.1
Di:
# Phalcon\Mvc\Application
use Phalcon\Di\DiInterface;
use Phalcon\Mvc\Application;
use Srgiz\Phalcon\WebProfiler\WebProfiler;
/** @var DiInterface $di */
if ('dev' === $env) {
$di->register(new WebProfiler());
}
$application = new Application($di);
$application->setEventsManager($di->getShared('eventsManager'));# Phalcon\Mvc\Micro
use Phalcon\Di\DiInterface;
use Phalcon\Mvc\Micro;
use Srgiz\Phalcon\WebProfiler\WebProfiler;
/** @var DiInterface $di */
if ('dev' === $env) {
$di->register(new WebProfiler());
}
$app = new Micro($di);
$app->setEventsManager($di->getShared('eventsManager'));Configure eventsManager:
eventsManager:
className: Phalcon\Events\Manager
calls:
- method: enablePriorities
arguments:
- { type: parameter, value: true }Enable events in services:
dispatcher:
db:
view:
volt:
calls:
- method: setEventsManager
arguments:
- { type: service, name: eventsManager }// ./config/config.php
return [
'profiler' => [
'viewsCachePath' => '/var/www/var/cache/volt/',
'tagsDir' => '/var/www/var/profiler',
//'routePrefix' => '/_profiler',
//'collectors' => [ /** @see \Srgiz\Phalcon\WebProfiler\Collector\CollectorInterface */
// CustomCollector::class,
//],
],
];{# layout.volt #}
<body>
content
{% if _profilerTag is defined %}
<script>
document.addEventListener('DOMContentLoaded', function () {
fetch('{{ url(['for': '_profiler-bar', 'tag': _profilerTag])|escape_js }}')
.then(function(res) { return res.text() })
.then(function(data) {
document.body.innerHTML += data
})
.catch(function(e) {
console.error(e)
})
})
</script>
{% endif %}
</body>Create a logger adapter:
$container->setShared('devLoggerAdapter', function () use ($container) {
return $container->has('profilerLoggerAdapter')
? $container->getShared('profilerLoggerAdapter')
: new \Phalcon\Logger\Adapter\Noop();
});Usage:
logger:
className: Phalcon\Logger\Logger
shared: true
arguments:
- { type: parameter, value: main }
calls:
- method: addAdapter
arguments:
- { type: parameter, value: profiler }
- { type: service, name: devLoggerAdapter }Create a stopwatch adapter:
use Phalcon\Di\DiInterface;
use Phalcon\Di\ServiceProviderInterface;
class StopwatchProvider implements ServiceProviderInterface
{
public function register(DiInterface $di): void
{
$di->setShared('stopwatch', function () use ($di) {
return $di->has('profilerStopwatch') ? $di->getShared('profilerStopwatch') : null;
});
}
}Usage:
$di->get('stopwatch')?->start('test');
// ...
$di->get('stopwatch')?->stop('test');use Srgiz\Phalcon\WebProfiler\Collector\CollectorInterface;
class CustomCollector implements CollectorInterface
{
public function templatePath(): string
{
return '/var/www/templates/custom'; // .volt
}
public function name(): string
{
return 'Custom';
}
public function collect(): array
{
return [
'message' => 'hello',
];
}
}{# custom.volt #}
{% extends '@profiler/data.volt' %}
{% block panel %}
Message: {{ message|e }}
{% endblock %}
