Slim 3 黑洞错误

Slim 3 blackholing errors

我有一个小型 slim 3 应用程序,当我抛出异常时,slim 只显示一般错误消息:

Slim Application Error

A website error has occurred. Sorry for the temporary inconvenience.

在 slim 2 中你可以做这样的事情来打开调试模式给你回溯等:

$app->config('debug', true);

slim 3 好像没有。此外,它似乎覆盖了我的异常和错误处理程序。

我怎样才能让 slim 吐出错误,或者至少调用我的错误处理程序(将输出通过管道传输到 kint 以获取调试信息)

查看源代码,可以像这样初始化 slim 3 并显示错误:

$app = new \Slim\App(['settings' => ['displayErrorDetails' => true]]);

我不确定是否可以在事后更改此设置而不完全替换 errorHandler

要显示默认异常处理程序的完整堆栈跟踪,请使用 j-v 所说的内容。

如果您想自己处理 Slim 中的异常,那么您需要覆盖 Slim 的默认异常处理程序,因为它将在您的 "not in Slim" 错误处理程序之前使用:

$app = new \Slim\App();

$container = $app->getContainer();
$container['errorHandler'] = function(ServerRequestInterface $request, ResponseInterface $response, Exception $exception) {
    //Handle exception here
}

错误处理有很好的记录:Official Docs

$app = new \Slim\App();
$c = $app->getContainer();
$c['errorHandler'] = function ($c) {
    return function ($request, $response, $exception) use ($c) {
         return $c['response']->withStatus(500)
                              ->withHeader('Content-Type', 'text/html')
                              ->write('Something went wrong!');
         };
   };

错误处理是最好的解决方案。您可以执行一些操作,例如查看 Error Trace

$app = new \Slim\App();
$container = $app->getContainer();
$container['phpErrorHandler'] = $container['errorHandler'] = function ($c) {
    return function ($request, $response, $exception) use ($c) {
         return $c['response']->withStatus(500)
                              ->withHeader('Content-Type', 'text/html')
                              ->write('Something went wrong!<br><br>' . 
                                      nl2br($error->getTraceAsString()));
         };
   };

设置 displayErrorDetails->true。 你会找到错误的原因。

 $config = ['settings' => [
        'addContentLengthHeader' => true,
        'displayErrorDetails' => true
    ]];
    $app = new \Slim\App($config)