From d7def87f34ba8fdc189e892df37ac12f76e9a88c Mon Sep 17 00:00:00 2001 From: Awilum Date: Mon, 7 Sep 2020 19:08:17 +0300 Subject: [PATCH] feat(core): add filp/whoops instead of zeuxisoo/slim-whoops #472 --- composer.json | 2 +- src/flextype/bootstrap.php | 73 +++++++++++++++++++++++++++++--------- 2 files changed, 57 insertions(+), 18 deletions(-) diff --git a/composer.json b/composer.json index 2f3e65ea..7b55cd18 100755 --- a/composer.json +++ b/composer.json @@ -36,7 +36,7 @@ "flextype-components/session" : "1.1.1", "slim/slim": "~3.12.3", - "zeuxisoo/slim-whoops": "~0.6.5", + "filp/whoops": "~2.7.3", "league/glide-slim": "~1.0.0", "league/event": "~2.2.0", diff --git a/src/flextype/bootstrap.php b/src/flextype/bootstrap.php index a7de5b7d..51f0a823 100755 --- a/src/flextype/bootstrap.php +++ b/src/flextype/bootstrap.php @@ -12,7 +12,11 @@ namespace Flextype; use Flextype\Foundation\Flextype; use Flextype\Component\Registry\Registry; use Flextype\Component\Session\Session; -use Zeuxisoo\Whoops\Provider\Slim\WhoopsMiddleware; +use Slim\Http\Environment; +use Slim\Http\Uri; +use Whoops\Util\Misc; +use Whoops\Handler\PrettyPageHandler; +use Whoops\Handler\JsonResponseHandler; use function date_default_timezone_set; use function error_reporting; use function file_exists; @@ -44,8 +48,6 @@ include_once ROOT_DIR . '/src/flextype/preflight.php'; $flextype = Flextype::getInstance([ 'settings' => [ 'debug' => $registry->get('flextype.settings.errors.display'), - 'whoops.editor' => $registry->get('flextype.settings.whoops.editor'), - 'whoops.page_title' => $registry->get('flextype.settings.whoops.page_title'), 'displayErrorDetails' => $registry->get('flextype.settings.display_error_details'), 'addContentLengthHeader' => $registry->get('flextype.settings.add_content_length_header'), 'routerCacheFile' => $registry->get('flextype.settings.router_cache_file'), @@ -56,6 +58,56 @@ $flextype = Flextype::getInstance([ ], ]); +/** + * Display Errors + */ +if ($registry->get('flextype.settings.errors.display')) { + + $environment = new Environment($_SERVER); + $uri = Uri::createFromEnvironment($environment); + + $prettyPageHandler = new PrettyPageHandler(); + + $prettyPageHandler->setEditor($registry->get('flextype.settings.whoops.editor')); + $prettyPageHandler->setPageTitle($registry->get('flextype.settings.whoops.page_title')); + + $prettyPageHandler->addDataTable('Flextype Application', [ + 'Application Class' => get_class(flextype()), + 'Script Name' => $environment->get('SCRIPT_NAME'), + 'Request URI' => $environment->get('PATH_INFO') ?: '', + ]); + + $prettyPageHandler->addDataTable('Flextype Application (Request)', array( + 'Path' => $uri->getPath(), + 'URL' => (string) $uri, + 'Query String' => $uri->getQuery() ?: '', + 'Scheme' => $uri->getScheme() ?: '', + 'Port' => $uri->getPort() ?: '', + 'Host' => $uri->getHost() ?: '', + )); + + // Set Whoops to default exception handler + $whoops = new \Whoops\Run; + $whoops->pushHandler($prettyPageHandler); + + // Enable JsonResponseHandler when request is AJAX + if (Misc::isAjaxRequest()){ + $whoops->pushHandler(new JsonResponseHandler()); + } + + $whoops->register(); + + flextype()->container()['phpErrorHandler'] = + flextype()->container()['errorHandler'] = + function() use ($whoops) { + new WhoopsErrorHandler($whoops); + }; + + flextype()->container()['whoops'] = $whoops; +} else { + error_reporting(0); +} + /** * Include Dependencies */ @@ -79,19 +131,6 @@ function_exists('mb_language') and mb_language('uni'); function_exists('mb_regex_encoding') and mb_regex_encoding(flextype('registry')->get('flextype.settings.charset')); function_exists('mb_internal_encoding') and mb_internal_encoding(flextype('registry')->get('flextype.settings.charset')); -/** - * Display Errors - */ -if (flextype('registry')->get('flextype.settings.errors.display')) { - - /** - * Add WhoopsMiddleware - */ - flextype()->add(new WhoopsMiddleware()); -} else { - error_reporting(0); -} - /** * Set default timezone */ @@ -125,7 +164,7 @@ foreach ($entry_fields as $field_name => $field) { if (! file_exists($entry_field_file_path)) { continue; } - + include_once $entry_field_file_path; }