/**
* Execute the middleware.
*
* @param ServerRequestInterface $request
* @param ResponseInterface $response
* @param callable $next
*
* @return ResponseInterface
*/
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
{
if (!Middleware::hasAttribute($request, FormatNegotiator::KEY)) {
throw new RuntimeException('This middleware needs FormatNegotiator executed before');
}
$ajax = Utils\Helpers::isAjax($request);
$debugBar = $this->debugBar ?: new StandardDebugBar();
//Redirection response
if (Utils\Helpers::isRedirect($response)) {
if ($debugBar->isDataPersisted() || session_status() === PHP_SESSION_ACTIVE) {
$debugBar->stackData();
}
//Html response
} elseif (FormatNegotiator::getFormat($request) === 'html') {
$renderer = $debugBar->getJavascriptRenderer();
ob_start();
echo '<style>';
$renderer->dumpCssAssets();
echo '</style>';
echo '<script>';
$renderer->dumpJsAssets();
echo '</script>';
echo $renderer->render(!$ajax);
$response = $this->inject($response, ob_get_clean());
//Ajax response
} elseif ($ajax && $this->captureAjax) {
$headers = $debugBar->getDataAsHeaders();
foreach ($headers as $name => $value) {
$response = $response->withHeader($name, $value);
}
}
return $next($request, $response);
}