コード例 #1
0
 static function startUp(KernelInterface $kernel, ModuleInfo $moduleInfo)
 {
     $kernel->onConfigure(function (LoggerInterface $logger, $webConsole) {
         if ($webConsole) {
             DebugConsole::registerPanel('request', new PSR7RequestLogger('Request', 'fa fa-paper-plane'));
             DebugConsole::registerPanel('response', new PSR7ResponseLogger('Response', 'fa fa-file'));
             DebugConsole::registerPanel('routes', new ConsoleLogger('Routing', 'fa fa-location-arrow'));
             DebugConsole::registerPanel('navigation', new ConsoleLogger('Navigation', 'fa fa-compass big'));
             DebugConsole::registerPanel('config', new ConsoleLogger('Configuration', 'fa fa-cogs'));
             DebugConsole::registerPanel('session', new ConsoleLogger('Session', 'fa fa-user'));
             DebugConsole::registerPanel('database', new ConsoleLogger('Database', 'fa fa-database'));
             DebugConsole::registerLogger('trace', new ConsoleLogger('Trace', 'fa fa-clock-o big'));
             //    DebugConsole::registerPanel ('exceptions', new ConsoleLogger ('Exceptions', 'fa fa-bug'));
             // Writing to the logger also writes to the Inspector panel.
             if ($logger instanceof Logger) {
                 $logger->pushHandler(new WebConsoleMonologHandler(env('DEBUG_LEVEL') ?: Logger::DEBUG));
             }
         }
     });
 }
コード例 #2
0
 function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
 {
     if (!$this->webConsole) {
         // In case the middleware was registered.
         return $next();
     }
     //------------------------------------------------------------------
     /** @var ResponseInterface $response */
     $response = $next();
     $contentType = $response->getHeaderLine('Content-Type');
     $status = $response->getStatusCode();
     if ($status >= 300 && $status < 400 || $contentType && $contentType != 'text/html') {
         return $response;
     }
     $response->getBody()->rewind();
     //------------------
     // Logging panel
     //------------------
     if (extension_loaded('xdebug')) {
         DebugConsole::defaultLogger()->write('<#alert><b>Warning:</b> When running with Xdebug enabled, the framework\'s performance is severely degraded, especially on debug mode.</#alert>' . '<p class=__comment>Refer to the framework\'s documentation for more information.</p>');
     }
     //------------------
     // Request panel
     //------------------
     $log = DebugConsole::logger('request');
     if (!$log->hasRequest()) {
         $log->setRequest($request);
     }
     //------------------
     // Response panel
     //------------------
     DebugConsole::logger('response')->setResponse($response);
     //------------------
     // Routing panel
     //------------------
     $router = $this->injector->make(ApplicationRouterInterface::class);
     $handlers = $router->__debugInfo()['handlers'];
     $rootR = $handlers ? implode('', map($handlers, function ($r) {
         return sprintf('<#row><#type>%s</#type></#row>', is_string($r) ? $r : typeOf($r));
     })) : '<#i><i>empty</i></#i>';
     $logger = $this->injector->make(RoutingLogger::class);
     $log = $logger->getContent();
     DebugConsole::logger('routes')->write("<#section|REGISTERED ROUTERS>{$rootR}</#section>" . "<#section|APPLICATION MIDDLEWARE STACK &nbsp;┊&nbsp; RUN HISTORY>")->write($log)->write("<#row>Return from ")->typeName($this)->write("</#row>")->write("<#row><i>(log entries from this point on can't be displayed)</i></#row>")->write("</#indent>")->write("<#row>Exit stack 1</#row>")->write("<#row>End of routing log</#row>")->write("</#section>");
     //------------------
     // Navigation panel
     //------------------
     if ($this->injector->provides(NavigationInterface::class)) {
         try {
             /** @var NavigationInterface $navigation */
             $navigation = $this->injector->make(NavigationInterface::class);
             DebugConsole::logger('navigation')->withFilter(function ($k, $v, $o) use($navigation) {
                 if ($k === 'parent' || $k === 'request') {
                     return '...';
                 }
                 if ($k === 'IDs' && $o != $navigation->rootLink()) {
                     return '...';
                 }
                 return true;
             }, $navigation);
         } catch (\Exception $e) {
         }
     }
     //------------------
     // Config. panel
     //------------------
     DebugConsole::logger('config')->inspect($this->kernelSettings);
     //------------------
     // Session panel
     //------------------
     if ($this->injector->provides(SessionInterface::class)) {
         DebugConsole::logger('session')->write('<button type="button" class="__btn __btn-default" style="position:absolute;right:5px;top:5px" onclick="location.href=\'logout\'">Log out</button>')->inspect($this->injector->make(SessionInterface::class));
     }
     //------------------
     // Tracing panel
     //------------------
     $trace = DebugConsole::logger('trace');
     if ($trace->hasContent()) {
         DebugConsole::registerPanel('trace', $trace);
     }
     return DebugConsole::outputContentViaResponse($request, $response, true);
 }
コード例 #3
0
 protected function afterRender()
 {
     parent::afterRender();
     //----------------------------------------------------------------------------------------
     // View Model panel
     // (MUST run before the DOM panel to capture the data-binding stack at its current state)
     //----------------------------------------------------------------------------------------
     DebugConsole::registerPanel('view', new ConsoleLogger('View', 'fa fa-eye'));
     $VMFilter = function ($k, $v, $o) {
         if ($v instanceof DocumentContext || $v instanceof Component || $k === 'parent' || $k === 'model') {
             return '...';
         }
         return true;
     };
     $expMap = Expression::$inspectionMap;
     ksort($expMap);
     DebugConsole::logger('view')->withFilter($VMFilter, $this->context)->write('<#section|Compiled expressions>')->inspect($expMap)->write('</#section>');
     //------------
     // Model panel
     //------------
     DebugConsole::registerPanel('model', new ConsoleLogger('Model', 'fa fa-table'));
     $shadowDOM = $this->getShadowDOM();
     if ($shadowDOM) {
         $VMFilter = function ($k, $v, $o) {
             if ($v instanceof KernelSettings || $v instanceof NavigationInterface || $v instanceof NavigationLinkInterface || $v instanceof SessionInterface || $v instanceof ServerRequestInterface || $v instanceof DocumentContext || $v instanceof Component) {
                 return '...';
             }
             return true;
         };
         $binder = $shadowDOM->getDataBinder();
         DebugConsole::logger('model')->write('<#i>PAGE DATA BINDER: ' . Debug::getType($binder) . "</#i>")->write("<#section|PAGE VIEW MODEL>")->withFilter($VMFilter, $binder->getViewModel())->write("</#section>");
     }
     //-----------
     // DOM panel
     //-----------
     if ($this->matisseSettings->inspectDOM()) {
         DebugConsole::registerPanel('DOM', new ConsoleLogger('Server-side DOM', 'fa fa-sitemap'));
         $insp = $this->inspect(true);
         DebugConsole::logger('DOM')->write($insp);
     }
 }