/** * Collect information from Twig * * @param Request $request The Request Object * @param Response $response The Response Object * @param \Exception $exception The Exception */ public function collect(Request $request, Response $response, \Exception $exception = null) { $filters = array(); $tests = array(); $extensions = array(); $functions = array(); foreach ($this->getTwig()->getExtensions() as $extensionName => $extension) { $extensions[] = array('name' => $extensionName, 'class' => get_class($extension)); foreach ($extension->getFilters() as $filterName => $filter) { if ($filter instanceof \Twig_FilterInterface) { $call = $filter->compile(); if (is_array($call) && is_callable($call)) { $call = 'Method ' . $call[1] . ' of an object ' . get_class($call[0]); } } else { $call = $filter->getName(); } $filters[] = array('name' => $filterName, 'extension' => $extensionName, 'call' => $call); } foreach ($extension->getTests() as $testName => $test) { if ($test instanceof \Twig_TestInterface) { $call = $test->compile(); } else { $call = $test->getName(); } $tests[] = array('name' => $testName, 'extension' => $extensionName, 'call' => $call); } foreach ($extension->getFunctions() as $functionName => $function) { if ($function instanceof \Twig_FunctionInterface) { $call = $function->compile(); } else { $call = $function->getName(); } $functions[] = array('name' => $functionName, 'extension' => $extensionName, 'call' => $call); } } $this->data = array('extensions' => $extensions, 'tests' => $tests, 'filters' => $filters, 'functions' => $functions, 'templates' => hackislyParseRegexTemplates($this->app['twig.loader']), 'templatechosen' => $this->app['log']->getValue('templatechosen'), 'templateerror' => $this->app['log']->getValue('templateerror')); }
return ""; } $queries = array(); $querycount = 0; $querytime = 0; foreach ($logger->queries as $query) { // Skip "PRAGMA .." queries by SQLITE. if (strpos($query['sql'], "PRAGMA ") === 0) { continue; } $queries[] = array('query' => $query['sql'], 'params' => $query['params'], 'types' => $query['types'], 'duration' => sprintf("%0.2f", $query['executionMS'])); $querycount++; $querytime += $query['executionMS']; } $twig = $app['twig.loader']; $templates = hackislyParseRegexTemplates($twig); $route = $request->get('_route'); $route_params = $request->get('_route_params'); $log = $app['log']->getMemorylog(); // echo "<pre>\n" . util::var_dump($log, true) . "</pre>\n"; $servervars = array('cookies <small>($_COOKIES)</small>' => $request->cookies->all(), 'headers' => makeValuepairs($request->headers->all(), '', '0'), 'query <small>($_GET)</small>' => $request->query->all(), 'request <small>($_POST)</small>' => $request->request->all(), 'session <small>($_SESSION)</small>' => $request->getSession()->all(), 'server <small>($_SERVER)</small>' => $request->server->all(), 'response' => makeValuepairs($response->headers->all(), '', '0'), 'statuscode' => $response->getStatusCode()); echo $app['twig']->render('debugbar.twig', array('timetaken' => timeTaken(), 'memtaken' => getMem(), 'memtaken' => getMaxMem(), 'querycount' => $querycount, 'querytime' => sprintf("%0.2f", $querytime), 'queries' => $queries, 'servervars' => $servervars, 'templates' => $templates, 'log' => $log, 'route' => "/" . $route, 'route_params' => $route_params, 'editlink' => $app['editlink'], 'paths' => getPaths($app['config']))); }); } $app->after(function (Request $request, Response $response) use($app) { $end = !empty($app['end']) ? $app['end'] : false; if ($end == "frontend") { $html = $response->getContent(); // Insert our 'generator' after the last <meta ..> tag. $app['extensions']->insertSnippet('aftermeta', '<meta name="generator" content="Bolt">'); $html = $app['extensions']->processSnippetQueue($html);
public function initAfterHandler() { // On 'after' attach the debug-bar, if debug is enabled.. if ($this['debug'] && ($this['session']->has('user') || $this['config']->get('general/debug_show_loggedoff'))) { // Set the error_reporting to the level specified in config.yml error_reporting($this['config']->get('general/debug_error_level')); // Register Whoops, to handle errors for logged in users only. if ($this['config']->get('general/debug_enable_whoops')) { $this->register(new WhoopsServiceProvider()); } $this->register(new Silex\Provider\ServiceControllerServiceProvider()); // Register the Silex/Symfony web debug toolbar. $this->register(new Silex\Provider\WebProfilerServiceProvider(), array('profiler.cache_dir' => $this['resources']->getPath('cache') . '/profiler', 'profiler.mount_prefix' => '/_profiler')); // Register the toolbar item for our Database query log. $this->register(new Provider\DatabaseProfilerServiceProvider()); // Register the toolbar item for our bolt nipple. $this->register(new Provider\BoltProfilerServiceProvider()); // Register the toolbar item for the Twig toolbar item. $this->register(new Provider\TwigProfilerServiceProvider()); $this['twig.loader.filesystem']->addPath(BOLT_PROJECT_ROOT_DIR . '/vendor/symfony/web-profiler-bundle/Symfony/Bundle/WebProfilerBundle/Resources/views', 'WebProfiler'); $this['twig.loader.filesystem']->addPath(__DIR__ . '/../../view', 'BoltProfiler'); // PHP 5.3 does not allow 'use ($this)' in closures. $app = $this; $this->after(function () use($app) { foreach (hackislyParseRegexTemplates($app['twig.loader.filesystem']) as $template) { $app['twig.logger']->collectTemplateData($template); } }); } else { error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_USER_DEPRECATED); } $this->after(array($this, 'afterHandler')); }