This package provides a slim PSR-7 middleware implementation based on the zendframework/zend-stratigility package. The middleware is responsible for "adding" the Prophiler Toolbar output to the Response object.
The preferred way of installing bitexpert/prophiler-psr7-middleware
is through Composer. Simply add
bitexpert/prophiler-psr7-middleware
as a dependency:
composer.phar require bitexpert/prophiler-psr7-middleware
Create the Prophiler toolbar:
$prophiler = new \Fabfuel\Prophiler\Profiler();
$toolbar = new \Fabfuel\Prophiler\Toolbar($prophiler);
Set-up your PSR-7 middleware, e.g. by using zendframework/zend-stratigility:
$request = \Zend\Diactoros\ServerRequestFactory::fromGlobals();
$response = \Zend\Diactoros\Response();
$app = new \Zend\Stratigility\MiddlewarePipe();
Add the ProphilerMiddleware to the Middleware pipe:
$app->pipe(new \bitExpert\Http\Middleware\Psr7\Prophiler\ProphilerMiddleware($toolbar));
"Execute" the Middleware pipe:
$response = $app($request, $response);
Register a pre_routing middleware in config/autoload/middleware-pipeline.local.php
:
return [
'middleware_pipeline' => [[
'middleware' => bitExpert\Http\Middleware\Psr7\
Prophiler\ProphilerMiddleware::class,
'priority' => 11000,
]]
];
Add a factory definition to config/autoload/dependencies.global.php
:
return [
'dependencies' => [
'factories' => [
bitExpert\Http\Middleware\Psr7\Prophiler\
ProphilerMiddleware::class =>
App\Middleware\ProphilerFactory::class
]
]
];
The \App\Middleware\ProphilerFactory
implementation looks like this:
namespace App\Middleware;
use Interop\Container\ContainerInterface;
use Fabfuel\Prophiler\Profiler;
use Fabfuel\Prophiler\Toolbar;
use bitExpert\Http\Middleware\Psr7\Prophiler\ProphilerMiddleware;
class ProphilerFactory
{
public function __invoke(ContainerInterface $container)
{
$prophiler = new Profiler();
$toolbar = new Toolbar($prophiler);
return new ProphilerMiddleware($toolbar);
}
}
Adding the following code snippet to the config/pipeline.php
file:
$app->pipe(ErrorHandler::class);
$debug = $app->getContainer()->get('config')['debug'] ?? false;
if ($debug) {
$prophiler = new \Fabfuel\Prophiler\Profiler();
$toolbar = new \Fabfuel\Prophiler\Toolbar($prophiler);
$middleware = new \bitExpert\Http\Middleware\Psr7\Prophiler\ProphilerMiddleware($toolbar);
$app->pipe($middleware);
}
$app->pipe(ServerUrlMiddleware::class);
By default Prophiler will not log or profile anything. You can add custom benchmarks by adding the following code snippet to the code you want to profile:
$profiler->start('\My\Class::doSomeOtherThing', ['additional' => 'information'], 'My Component');
// here be your custom code
$profiler->stop();
In addition to that Prophiler offers a lot of adapters and decorators for 3rd party tools and libraries.
The Prophiler PSR7 Middleware is released under the Apache 2.0 license.