Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit379b525

Browse files
committed
minor#32693 [ErrorRenderer] Allow disabling debug content in debug mode (preview mode) (yceruto)
This PR was merged into the 4.4 branch.Discussion----------[ErrorRenderer] Allow disabling debug content in debug mode (preview mode)| Q | A| ------------- | ---| Branch? | 4.4| Bug fix? | no| New feature? | yes| BC breaks? | no| Deprecations? | no| Tests pass? | yes| Fixed tickets | -| License | MITRequired by#31398 to show a preview mode of the error for each content format.Usage:https://github.com/symfony/symfony/pull/31398/files#diff-9ff5216ab011f5e48c7835d4138bf825R42Note that you can't enable the debug content in non-debug mode via `X-Debug`. I also added more tests.Commits-------a6bef5e Allow disabling debug content in debug mode (preview mode)
2 parentsa7852c0 +a6bef5e commit379b525

File tree

8 files changed

+199
-21
lines changed

8 files changed

+199
-21
lines changed

‎src/Symfony/Component/ErrorRenderer/ErrorRenderer/HtmlErrorRenderer.php‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,11 @@ public function getStylesheet(): string
9191

9292
privatefunctionrenderException(FlattenException$exception,string$debugTemplate ='views/exception_full.html.php'):string
9393
{
94+
$debug =$this->debug && ($exception->getHeaders()['X-Debug'] ??true);
9495
$statusText =$this->escape($exception->getTitle());
9596
$statusCode =$this->escape($exception->getStatusCode());
9697

97-
if (!$this->debug) {
98+
if (!$debug) {
9899
return$this->include('views/error.html.php', [
99100
'statusText' =>$statusText,
100101
'statusCode' =>$statusCode,

‎src/Symfony/Component/ErrorRenderer/ErrorRenderer/JsonErrorRenderer.php‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ public static function getFormat(): string
3838
*/
3939
publicfunctionrender(FlattenException$exception):string
4040
{
41+
$debug =$this->debug && ($exception->getHeaders()['X-Debug'] ??true);
42+
4143
$content = [
4244
'title' =>$exception->getTitle(),
4345
'status' =>$exception->getStatusCode(),
4446
'detail' =>$exception->getMessage(),
4547
];
46-
if ($this->debug) {
48+
if ($debug) {
4749
$content['exceptions'] =$exception->toArray();
4850
}
4951

‎src/Symfony/Component/ErrorRenderer/ErrorRenderer/TxtErrorRenderer.php‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,12 @@ public static function getFormat(): string
3838
*/
3939
publicfunctionrender(FlattenException$exception):string
4040
{
41+
$debug =$this->debug && ($exception->getHeaders()['X-Debug'] ??true);
4142
$content =sprintf("[title] %s\n",$exception->getTitle());
4243
$content .=sprintf("[status] %s\n",$exception->getStatusCode());
4344
$content .=sprintf("[detail] %s\n",$exception->getMessage());
4445

45-
if ($this->debug) {
46+
if ($debug) {
4647
foreach ($exception->toArray()as$i =>$e) {
4748
$content .=sprintf("[%d] %s: %s\n",$i +1,$e['class'],$e['message']);
4849
foreach ($e['trace']as$trace) {

‎src/Symfony/Component/ErrorRenderer/ErrorRenderer/XmlErrorRenderer.php‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,14 @@ public static function getFormat(): string
4040
*/
4141
publicfunctionrender(FlattenException$exception):string
4242
{
43+
$debug =$this->debug && ($exception->getHeaders()['X-Debug'] ??true);
4344
$title =$this->escapeXml($exception->getTitle());
4445
$message =$this->escapeXml($exception->getMessage());
4546
$statusCode =$this->escapeXml($exception->getStatusCode());
4647
$charset =$this->escapeXml($this->charset);
4748

4849
$exceptions ='';
49-
if ($this->debug) {
50+
if ($debug) {
5051
$exceptions .='<exceptions>';
5152
foreach ($exception->toArray()as$e) {
5253
$exceptions .=sprintf('<exception class="%s" message="%s"><traces>',$e['class'],$this->escapeXml($e['message']));

‎src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/HtmlErrorRendererTest.php‎

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,60 @@
1212
namespaceSymfony\Component\ErrorRenderer\Tests\ErrorRenderer;
1313

1414
usePHPUnit\Framework\TestCase;
15+
useSymfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
1516
useSymfony\Component\ErrorRenderer\ErrorRenderer\HtmlErrorRenderer;
1617
useSymfony\Component\ErrorRenderer\Exception\FlattenException;
1718

1819
class HtmlErrorRendererTestextends TestCase
1920
{
20-
publicfunctiontestRender()
21+
/**
22+
* @dataProvider getRenderData
23+
*/
24+
publicfunctiontestRender(FlattenException$exception,ErrorRendererInterface$errorRenderer,string$expected)
2125
{
22-
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
23-
$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) -->';
26+
$this->assertStringMatchesFormat($expected,$errorRenderer->render($exception));
27+
}
28+
29+
publicfunctiongetRenderData()
30+
{
31+
$expectedDebug =<<<HTML
32+
<!-- Foo (500 Internal Server Error) -->
33+
<!DOCTYPE html>
34+
<html lang="en">
35+
%A<title>Foo (500 Internal Server Error)</title>
36+
%A<div class="trace trace-as-html" id="trace-box-1">%A
37+
<!-- Foo (500 Internal Server Error) -->
38+
HTML;
39+
40+
$expectedNonDebug =<<<HTML
41+
<!DOCTYPE html>
42+
<html>
43+
%A<title>An Error Occurred: Internal Server Error</title>
44+
%A<h2>The server returned a "500 Internal Server Error".</h2>%A
45+
HTML;
46+
47+
yield'->render() returns the HTML content WITH stack traces in debug mode' => [
48+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
49+
newHtmlErrorRenderer(true),
50+
$expectedDebug,
51+
];
52+
53+
yield'->render() returns the HTML content WITHOUT stack traces in non-debug mode' => [
54+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
55+
newHtmlErrorRenderer(false),
56+
$expectedNonDebug,
57+
];
58+
59+
yield'->render() returns the HTML content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
60+
FlattenException::createFromThrowable(new \RuntimeException('Foo'),null, ['X-Debug' =>false]),
61+
newHtmlErrorRenderer(true),
62+
$expectedNonDebug,
63+
];
2464

25-
$this->assertStringMatchesFormat($expected, (newHtmlErrorRenderer(true))->render($exception));
65+
yield'->render() returns the HTML content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
66+
FlattenException::createFromThrowable(new \RuntimeException('Foo'),null, ['X-Debug' =>true]),
67+
newHtmlErrorRenderer(false),
68+
$expectedNonDebug,
69+
];
2670
}
2771
}

‎src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/JsonErrorRendererTest.php‎

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,23 @@
1212
namespaceSymfony\Component\ErrorRenderer\Tests\ErrorRenderer;
1313

1414
usePHPUnit\Framework\TestCase;
15+
useSymfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
1516
useSymfony\Component\ErrorRenderer\ErrorRenderer\JsonErrorRenderer;
1617
useSymfony\Component\ErrorRenderer\Exception\FlattenException;
1718

1819
class JsonErrorRendererTestextends TestCase
1920
{
20-
publicfunctiontestRender()
21+
/**
22+
* @dataProvider getRenderData
23+
*/
24+
publicfunctiontestRender(FlattenException$exception,ErrorRendererInterface$errorRenderer,string$expected)
2125
{
22-
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
23-
$expected =<<<JSON
26+
$this->assertStringMatchesFormat($expected,$errorRenderer->render($exception));
27+
}
28+
29+
publicfunctiongetRenderData()
30+
{
31+
$expectedDebug =<<<JSON
2432
{
2533
"title": "Internal Server Error",
2634
"status": 500,
@@ -29,9 +37,40 @@ public function testRender()
2937
{
3038
"message": "Foo",
3139
"class": "RuntimeException",
32-
"trace":
40+
"trace": [
41+
%A
42+
JSON;
43+
44+
$expectedNonDebug =<<<JSON
45+
{
46+
"title": "Internal Server Error",
47+
"status": 500,
48+
"detail": "Foo"
49+
}
3350
JSON;
3451

35-
$this->assertStringStartsWith($expected, (newJsonErrorRenderer(true))->render($exception));
52+
yield'->render() returns the JSON content WITH stack traces in debug mode' => [
53+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
54+
newJsonErrorRenderer(true),
55+
$expectedDebug,
56+
];
57+
58+
yield'->render() returns the JSON content WITHOUT stack traces in non-debug mode' => [
59+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
60+
newJsonErrorRenderer(false),
61+
$expectedNonDebug,
62+
];
63+
64+
yield'->render() returns the JSON content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
65+
FlattenException::createFromThrowable(new \RuntimeException('Foo'),null, ['X-Debug' =>false]),
66+
newJsonErrorRenderer(true),
67+
$expectedNonDebug,
68+
];
69+
70+
yield'->render() returns the JSON content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
71+
FlattenException::createFromThrowable(new \RuntimeException('Foo'),null, ['X-Debug' =>true]),
72+
newJsonErrorRenderer(false),
73+
$expectedNonDebug,
74+
];
3675
}
3776
}

‎src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/TxtErrorRendererTest.php‎

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,58 @@
1212
namespaceSymfony\Component\ErrorRenderer\Tests\ErrorRenderer;
1313

1414
usePHPUnit\Framework\TestCase;
15+
useSymfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
1516
useSymfony\Component\ErrorRenderer\ErrorRenderer\TxtErrorRenderer;
1617
useSymfony\Component\ErrorRenderer\Exception\FlattenException;
1718

1819
class TxtErrorRendererTestextends TestCase
1920
{
20-
publicfunctiontestRender()
21+
/**
22+
* @dataProvider getRenderData
23+
*/
24+
publicfunctiontestRender(FlattenException$exception,ErrorRendererInterface$errorRenderer,string$expected)
2125
{
22-
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
23-
$expected ='[title] Internal Server Error%A[status] 500%A[detail] Foo%A[1] RuntimeException: Foo%A';
26+
$this->assertStringMatchesFormat($expected,$errorRenderer->render($exception));
27+
}
28+
29+
publicfunctiongetRenderData()
30+
{
31+
$expectedDebug =<<<TXT
32+
[title] Internal Server Error
33+
[status] 500
34+
[detail] Foo
35+
[1] RuntimeException: Foo
36+
in %A
37+
TXT;
38+
39+
$expectedNonDebug =<<<TXT
40+
[title] Internal Server Error
41+
[status] 500
42+
[detail] Foo
43+
TXT;
44+
45+
yield'->render() returns the TXT content WITH stack traces in debug mode' => [
46+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
47+
newTxtErrorRenderer(true),
48+
$expectedDebug,
49+
];
50+
51+
yield'->render() returns the TXT content WITHOUT stack traces in non-debug mode' => [
52+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
53+
newTxtErrorRenderer(false),
54+
$expectedNonDebug,
55+
];
56+
57+
yield'->render() returns the TXT content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
58+
FlattenException::createFromThrowable(new \RuntimeException('Foo'),null, ['X-Debug' =>false]),
59+
newTxtErrorRenderer(true),
60+
$expectedNonDebug,
61+
];
2462

25-
$this->assertStringMatchesFormat($expected, (newTxtErrorRenderer(true))->render($exception));
63+
yield'->render() returns the TXT content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
64+
FlattenException::createFromThrowable(new \RuntimeException('Foo'),null, ['X-Debug' =>true]),
65+
newTxtErrorRenderer(false),
66+
$expectedNonDebug,
67+
];
2668
}
2769
}

‎src/Symfony/Component/ErrorRenderer/Tests/ErrorRenderer/XmlErrorRendererTest.php‎

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,64 @@
1212
namespaceSymfony\Component\ErrorRenderer\Tests\ErrorRenderer;
1313

1414
usePHPUnit\Framework\TestCase;
15+
useSymfony\Component\ErrorRenderer\ErrorRenderer\ErrorRendererInterface;
1516
useSymfony\Component\ErrorRenderer\ErrorRenderer\XmlErrorRenderer;
1617
useSymfony\Component\ErrorRenderer\Exception\FlattenException;
1718

1819
class XmlErrorRendererTestextends TestCase
1920
{
20-
publicfunctiontestRender()
21+
/**
22+
* @dataProvider getRenderData
23+
*/
24+
publicfunctiontestRender(FlattenException$exception,ErrorRendererInterface$errorRenderer,string$expected)
2125
{
22-
$exception = FlattenException::createFromThrowable(new \RuntimeException('Foo'));
23-
$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';
26+
$this->assertStringMatchesFormat($expected,$errorRenderer->render($exception));
27+
}
28+
29+
publicfunctiongetRenderData()
30+
{
31+
$expectedDebug =<<<XML
32+
<?xml version="1.0" encoding="UTF-8" ?>
33+
<problem xmlns="urn:ietf:rfc:7807">
34+
<title>Internal Server Error</title>
35+
<status>500</status>
36+
<detail>Foo</detail>
37+
<exceptions><exception class="RuntimeException" message="Foo"><traces><trace>%A</trace></traces></exception></exceptions>
38+
</problem>
39+
XML;
40+
41+
$expectedNonDebug =<<<XML
42+
<?xml version="1.0" encoding="UTF-8" ?>
43+
<problem xmlns="urn:ietf:rfc:7807">
44+
<title>Internal Server Error</title>
45+
<status>500</status>
46+
<detail>Foo</detail>
47+
48+
</problem>
49+
XML;
50+
51+
yield'->render() returns the XML content WITH stack traces in debug mode' => [
52+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
53+
newXmlErrorRenderer(true),
54+
$expectedDebug,
55+
];
56+
57+
yield'->render() returns the XML content WITHOUT stack traces in non-debug mode' => [
58+
FlattenException::createFromThrowable(new \RuntimeException('Foo')),
59+
newXmlErrorRenderer(false),
60+
$expectedNonDebug,
61+
];
62+
63+
yield'->render() returns the XML content WITHOUT stack traces in debug mode FORCING non-debug via X-Debug header' => [
64+
FlattenException::createFromThrowable(new \RuntimeException('Foo'),null, ['X-Debug' =>false]),
65+
newXmlErrorRenderer(true),
66+
$expectedNonDebug,
67+
];
2468

25-
$this->assertStringMatchesFormat($expected, (newXmlErrorRenderer(true))->render($exception));
69+
yield'->render() returns the XML content WITHOUT stack traces in non-debug mode EVEN FORCING debug via X-Debug header' => [
70+
FlattenException::createFromThrowable(new \RuntimeException('Foo'),null, ['X-Debug' =>true]),
71+
newXmlErrorRenderer(false),
72+
$expectedNonDebug,
73+
];
2674
}
2775
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp