Allow disabling debug content in debug mode (preview mode)
This commit is contained in:
parent
a7852c0da8
commit
a6bef5eacd
@ -91,10 +91,11 @@ class HtmlErrorRenderer implements ErrorRendererInterface
|
||||
|
||||
private function renderException(FlattenException $exception, string $debugTemplate = 'views/exception_full.html.php'): string
|
||||
{
|
||||
$debug = $this->debug && ($exception->getHeaders()['X-Debug'] ?? true);
|
||||
$statusText = $this->escape($exception->getTitle());
|
||||
$statusCode = $this->escape($exception->getStatusCode());
|
||||
|
||||
if (!$this->debug) {
|
||||
if (!$debug) {
|
||||
return $this->include('views/error.html.php', [
|
||||
'statusText' => $statusText,
|
||||
'statusCode' => $statusCode,
|
||||
|
@ -38,12 +38,14 @@ class JsonErrorRenderer implements ErrorRendererInterface
|
||||
*/
|
||||
public function render(FlattenException $exception): string
|
||||
{
|
||||
$debug = $this->debug && ($exception->getHeaders()['X-Debug'] ?? true);
|
||||
|
||||
$content = [
|
||||
'title' => $exception->getTitle(),
|
||||
'status' => $exception->getStatusCode(),
|
||||
'detail' => $exception->getMessage(),
|
||||
];
|
||||
if ($this->debug) {
|
||||
if ($debug) {
|
||||
$content['exceptions'] = $exception->toArray();
|
||||
}
|
||||
|
||||
|
@ -38,11 +38,12 @@ class TxtErrorRenderer implements ErrorRendererInterface
|
||||
*/
|
||||
public function render(FlattenException $exception): string
|
||||
{
|
||||
$debug = $this->debug && ($exception->getHeaders()['X-Debug'] ?? true);
|
||||
$content = sprintf("[title] %s\n", $exception->getTitle());
|
||||
$content .= sprintf("[status] %s\n", $exception->getStatusCode());
|
||||
$content .= sprintf("[detail] %s\n", $exception->getMessage());
|
||||
|
||||
if ($this->debug) {
|
||||
if ($debug) {
|
||||
foreach ($exception->toArray() as $i => $e) {
|
||||
$content .= sprintf("[%d] %s: %s\n", $i + 1, $e['class'], $e['message']);
|
||||
foreach ($e['trace'] as $trace) {
|
||||
|
@ -40,13 +40,14 @@ class XmlErrorRenderer implements ErrorRendererInterface
|
||||
*/
|
||||
public function render(FlattenException $exception): string
|
||||
{
|
||||
$debug = $this->debug && ($exception->getHeaders()['X-Debug'] ?? true);
|
||||
$title = $this->escapeXml($exception->getTitle());
|
||||
$message = $this->escapeXml($exception->getMessage());
|
||||
$statusCode = $this->escapeXml($exception->getStatusCode());
|
||||
$charset = $this->escapeXml($this->charset);
|
||||
|
||||
$exceptions = '';
|
||||
if ($this->debug) {
|
||||
if ($debug) {
|
||||
$exceptions .= '<exceptions>';
|
||||
foreach ($exception->toArray() as $e) {
|
||||
$exceptions .= sprintf('<exception class="%s" message="%s"><traces>', $e['class'], $this->escapeXml($e['message']));
|
||||
|
@ -12,16 +12,60 @@
|
||||
namespace Symfony\Component\ErrorRenderer\Tests\ErrorRenderer;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
|
||||
use Symfony\Component\ErrorRenderer\ErrorRenderer\HtmlErrorRenderer;
|
||||
use Symfony\Component\ErrorRenderer\Exception\FlattenException;
|
||||
|
||||
class HtmlErrorRendererTest extends TestCase
|
||||
{
|
||||
public function testRender()
|
||||
/**
|
||||
* @dataProvider getRenderData
|
||||
*/
|
||||
public function testRender(FlattenException $exception, ErrorRendererInterface $errorRenderer, string $expected)
|
||||
{
|
||||
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
|
||||
$expected = '<!-- Foo (500 Internal Server Error) -->%A<!DOCTYPE html>%A<html lang="en">%A<title>Foo (500 Internal Server Error)</title>%A<!-- Foo (500 Internal Server Error) -->';
|
||||
$this->assertStringMatchesFormat($expected, $errorRenderer->render($exception));
|
||||
}
|
||||
|
||||
$this->assertStringMatchesFormat($expected, (new HtmlErrorRenderer(true))->render($exception));
|
||||
public function getRenderData()
|
||||
{
|
||||
$expectedDebug = <<<HTML
|
||||
<!-- Foo (500 Internal Server Error) -->
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
%A<title>Foo (500 Internal Server Error)</title>
|
||||
%A<div class="trace trace-as-html" id="trace-box-1">%A
|
||||
<!-- Foo (500 Internal Server Error) -->
|
||||
HTML;
|
||||
|
||||
$expectedNonDebug = <<<HTML
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
%A<title>An Error Occurred: Internal Server Error</title>
|
||||
%A<h2>The server returned a "500 Internal Server Error".</h2>%A
|
||||
HTML;
|
||||
|
||||
yield '->render() returns the HTML content WITH stack traces in debug mode' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
|
||||
new HtmlErrorRenderer(true),
|
||||
$expectedDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the HTML content WITHOUT stack traces in non-debug mode' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
|
||||
new HtmlErrorRenderer(false),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the HTML content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => false]),
|
||||
new HtmlErrorRenderer(true),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the HTML content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => true]),
|
||||
new HtmlErrorRenderer(false),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -12,15 +12,23 @@
|
||||
namespace Symfony\Component\ErrorRenderer\Tests\ErrorRenderer;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
|
||||
use Symfony\Component\ErrorRenderer\ErrorRenderer\JsonErrorRenderer;
|
||||
use Symfony\Component\ErrorRenderer\Exception\FlattenException;
|
||||
|
||||
class JsonErrorRendererTest extends TestCase
|
||||
{
|
||||
public function testRender()
|
||||
/**
|
||||
* @dataProvider getRenderData
|
||||
*/
|
||||
public function testRender(FlattenException $exception, ErrorRendererInterface $errorRenderer, string $expected)
|
||||
{
|
||||
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
|
||||
$expected = <<<JSON
|
||||
$this->assertStringMatchesFormat($expected, $errorRenderer->render($exception));
|
||||
}
|
||||
|
||||
public function getRenderData()
|
||||
{
|
||||
$expectedDebug = <<<JSON
|
||||
{
|
||||
"title": "Internal Server Error",
|
||||
"status": 500,
|
||||
@ -29,9 +37,40 @@ class JsonErrorRendererTest extends TestCase
|
||||
{
|
||||
"message": "Foo",
|
||||
"class": "RuntimeException",
|
||||
"trace":
|
||||
"trace": [
|
||||
%A
|
||||
JSON;
|
||||
|
||||
$this->assertStringStartsWith($expected, (new JsonErrorRenderer(true))->render($exception));
|
||||
$expectedNonDebug = <<<JSON
|
||||
{
|
||||
"title": "Internal Server Error",
|
||||
"status": 500,
|
||||
"detail": "Foo"
|
||||
}
|
||||
JSON;
|
||||
|
||||
yield '->render() returns the JSON content WITH stack traces in debug mode' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
|
||||
new JsonErrorRenderer(true),
|
||||
$expectedDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the JSON content WITHOUT stack traces in non-debug mode' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
|
||||
new JsonErrorRenderer(false),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the JSON content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => false]),
|
||||
new JsonErrorRenderer(true),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the JSON content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => true]),
|
||||
new JsonErrorRenderer(false),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -12,16 +12,58 @@
|
||||
namespace Symfony\Component\ErrorRenderer\Tests\ErrorRenderer;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
|
||||
use Symfony\Component\ErrorRenderer\ErrorRenderer\TxtErrorRenderer;
|
||||
use Symfony\Component\ErrorRenderer\Exception\FlattenException;
|
||||
|
||||
class TxtErrorRendererTest extends TestCase
|
||||
{
|
||||
public function testRender()
|
||||
/**
|
||||
* @dataProvider getRenderData
|
||||
*/
|
||||
public function testRender(FlattenException $exception, ErrorRendererInterface $errorRenderer, string $expected)
|
||||
{
|
||||
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
|
||||
$expected = '[title] Internal Server Error%A[status] 500%A[detail] Foo%A[1] RuntimeException: Foo%A';
|
||||
$this->assertStringMatchesFormat($expected, $errorRenderer->render($exception));
|
||||
}
|
||||
|
||||
$this->assertStringMatchesFormat($expected, (new TxtErrorRenderer(true))->render($exception));
|
||||
public function getRenderData()
|
||||
{
|
||||
$expectedDebug = <<<TXT
|
||||
[title] Internal Server Error
|
||||
[status] 500
|
||||
[detail] Foo
|
||||
[1] RuntimeException: Foo
|
||||
in %A
|
||||
TXT;
|
||||
|
||||
$expectedNonDebug = <<<TXT
|
||||
[title] Internal Server Error
|
||||
[status] 500
|
||||
[detail] Foo
|
||||
TXT;
|
||||
|
||||
yield '->render() returns the TXT content WITH stack traces in debug mode' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
|
||||
new TxtErrorRenderer(true),
|
||||
$expectedDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the TXT content WITHOUT stack traces in non-debug mode' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
|
||||
new TxtErrorRenderer(false),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the TXT content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => false]),
|
||||
new TxtErrorRenderer(true),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the TXT content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => true]),
|
||||
new TxtErrorRenderer(false),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
@ -12,16 +12,64 @@
|
||||
namespace Symfony\Component\ErrorRenderer\Tests\ErrorRenderer;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
|
||||
use Symfony\Component\ErrorRenderer\ErrorRenderer\XmlErrorRenderer;
|
||||
use Symfony\Component\ErrorRenderer\Exception\FlattenException;
|
||||
|
||||
class XmlErrorRendererTest extends TestCase
|
||||
{
|
||||
public function testRender()
|
||||
/**
|
||||
* @dataProvider getRenderData
|
||||
*/
|
||||
public function testRender(FlattenException $exception, ErrorRendererInterface $errorRenderer, string $expected)
|
||||
{
|
||||
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
|
||||
$expected = '<?xml version="1.0" encoding="UTF-8" ?>%A<problem xmlns="urn:ietf:rfc:7807">%A<title>Internal Server Error</title>%A<status>500</status>%A<detail>Foo</detail>%A';
|
||||
$this->assertStringMatchesFormat($expected, $errorRenderer->render($exception));
|
||||
}
|
||||
|
||||
$this->assertStringMatchesFormat($expected, (new XmlErrorRenderer(true))->render($exception));
|
||||
public function getRenderData()
|
||||
{
|
||||
$expectedDebug = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<problem xmlns="urn:ietf:rfc:7807">
|
||||
<title>Internal Server Error</title>
|
||||
<status>500</status>
|
||||
<detail>Foo</detail>
|
||||
<exceptions><exception class="RuntimeException" message="Foo"><traces><trace>%A</trace></traces></exception></exceptions>
|
||||
</problem>
|
||||
XML;
|
||||
|
||||
$expectedNonDebug = <<<XML
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<problem xmlns="urn:ietf:rfc:7807">
|
||||
<title>Internal Server Error</title>
|
||||
<status>500</status>
|
||||
<detail>Foo</detail>
|
||||
|
||||
</problem>
|
||||
XML;
|
||||
|
||||
yield '->render() returns the XML content WITH stack traces in debug mode' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
|
||||
new XmlErrorRenderer(true),
|
||||
$expectedDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the XML content WITHOUT stack traces in non-debug mode' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
|
||||
new XmlErrorRenderer(false),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the XML content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => false]),
|
||||
new XmlErrorRenderer(true),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
|
||||
yield '->render() returns the XML content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
|
||||
FlattenException::createFromThrowable(new \RuntimeException('Foo'), null, ['X-Debug' => true]),
|
||||
new XmlErrorRenderer(false),
|
||||
$expectedNonDebug,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user