Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
89bbdae6
Commit
89bbdae6
authored
May 23, 2013
by
resurtm
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Initial version of the new error/exception page.
parent
b317c082
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
30 additions
and
191 deletions
+30
-191
SiteController.php
apps/bootstrap/controllers/SiteController.php
+1
-0
index.php
apps/bootstrap/www/index.php
+3
-2
ErrorHandler.php
framework/yii/base/ErrorHandler.php
+26
-189
errorHandler.php
framework/yii/views/errorHandler.php
+0
-0
No files found.
apps/bootstrap/controllers/SiteController.php
View file @
89bbdae6
...
...
@@ -20,6 +20,7 @@ class SiteController extends Controller
public
function
actionIndex
()
{
throw
new
\yii\base\HttpException
(
500
,
'Test exception'
);
echo
$this
->
render
(
'index'
);
}
...
...
apps/bootstrap/www/index.php
View file @
89bbdae6
...
...
@@ -3,8 +3,9 @@
// comment out the following line to disable debug mode
defined
(
'YII_DEBUG'
)
or
define
(
'YII_DEBUG'
,
true
);
require
(
__DIR__
.
'/../vendor/yiisoft/yii2/yii/Yii.php'
);
require
(
__DIR__
.
'/../vendor/autoload.php'
);
//require(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php');
//require(__DIR__ . '/../vendor/autoload.php');
require
(
__DIR__
.
'/../../../framework/yii/Yii.php'
);
$config
=
require
(
__DIR__
.
'/../config/main.php'
);
...
...
framework/yii/base/ErrorHandler.php
View file @
89bbdae6
...
...
@@ -7,6 +7,8 @@
namespace
yii\base
;
use
Yii
;
/**
* ErrorHandler handles uncaught PHP errors and exceptions.
*
...
...
@@ -31,28 +33,25 @@ class ErrorHandler extends Component
*/
public
$discardExistingOutput
=
true
;
/**
* @var string the route (eg 'site/error') to the controller action that will be used to display external errors.
* Inside the action, it can retrieve the error information by \Yii::$app->errorHandler->error.
* This property defaults to null, meaning ErrorHandler will handle the error display.
* @var string the route (e.g. 'site/error') to the controller action that will be used
* to display external errors. Inside the action, it can retrieve the error information
* by Yii::$app->errorHandler->error. This property defaults to null, meaning ErrorHandler
* will handle the error display.
*/
public
$errorAction
;
/**
* @var string the path of the view file for rendering exceptions
*/
public
$exceptionView
=
'@yii/views/exception.php'
;
/**
* @var string the path of the view file for rendering errors
* @var string the path of the view file for rendering exceptions and errors.
*/
public
$
errorView
=
'@yii/views/erro
r.php'
;
public
$
view
=
'@yii/views/errorHandle
r.php'
;
/**
* @var \Exception the exception that is being handled currently
* @var \Exception the exception that is being handled currently
.
*/
public
$exception
;
/**
* Handles exception
* @param \Exception $exception
* Handles exception
.
* @param \Exception $exception
to be handled.
*/
public
function
handle
(
$exception
)
{
...
...
@@ -66,14 +65,16 @@ class ErrorHandler extends Component
}
/**
* Renders exception
* @param \Exception $exception
* Renders exception
.
* @param \Exception $exception
to be handled.
*/
protected
function
renderException
(
$exception
)
{
if
(
$this
->
errorAction
!==
null
)
{
\Yii
::
$app
->
runAction
(
$this
->
errorAction
);
}
elseif
(
\Yii
::
$app
instanceof
\yii\web\Application
)
{
Yii
::
$app
->
runAction
(
$this
->
errorAction
);
}
elseif
(
!
(
Yii
::
$app
instanceof
\yii\web\Application
))
{
Yii
::
$app
->
renderException
(
$exception
);
}
else
{
if
(
!
headers_sent
())
{
if
(
$exception
instanceof
HttpException
)
{
header
(
'HTTP/1.0 '
.
$exception
->
statusCode
.
' '
.
$exception
->
getName
());
...
...
@@ -82,7 +83,7 @@ class ErrorHandler extends Component
}
}
if
(
isset
(
$_SERVER
[
'HTTP_X_REQUESTED_WITH'
])
&&
$_SERVER
[
'HTTP_X_REQUESTED_WITH'
]
===
'XMLHttpRequest'
)
{
\
Yii
::
$app
->
renderException
(
$exception
);
Yii
::
$app
->
renderException
(
$exception
);
}
else
{
// if there is an error during error rendering it's useful to
// display PHP error in debug mode instead of a blank screen
...
...
@@ -90,177 +91,25 @@ class ErrorHandler extends Component
ini_set
(
'display_errors'
,
1
);
}
$view
=
new
View
;
if
(
!
YII_DEBUG
||
$exception
instanceof
UserException
)
{
$viewName
=
$this
->
errorView
;
}
else
{
$viewName
=
$this
->
exceptionView
;
}
echo
$view
->
renderFile
(
$viewName
,
array
(
'exception'
=>
$exception
,
),
$this
);
}
}
else
{
\Yii
::
$app
->
renderException
(
$exception
);
}
}
/**
* Returns server and Yii version information.
* @return string server version information.
*/
public
function
getVersionInfo
()
{
$version
=
'<a href="http://www.yiiframework.com/">Yii Framework</a>/'
.
\Yii
::
getVersion
();
if
(
isset
(
$_SERVER
[
'SERVER_SOFTWARE'
]))
{
$version
=
$_SERVER
[
'SERVER_SOFTWARE'
]
.
' '
.
$version
;
}
return
$version
;
}
/**
* Converts arguments array to its string representation
*
* @param array $args arguments array to be converted
* @return string string representation of the arguments array
*/
public
function
argumentsToString
(
$args
)
{
$isAssoc
=
$args
!==
array_values
(
$args
);
$count
=
0
;
foreach
(
$args
as
$key
=>
$value
)
{
$count
++
;
if
(
$count
>=
5
)
{
if
(
$count
>
5
)
{
unset
(
$args
[
$key
]);
}
else
{
$args
[
$key
]
=
'...'
;
}
continue
;
}
if
(
is_object
(
$value
))
{
$args
[
$key
]
=
get_class
(
$value
);
}
elseif
(
is_bool
(
$value
))
{
$args
[
$key
]
=
$value
?
'true'
:
'false'
;
}
elseif
(
is_string
(
$value
))
{
if
(
strlen
(
$value
)
>
64
)
{
$args
[
$key
]
=
'"'
.
substr
(
$value
,
0
,
64
)
.
'..."'
;
}
else
{
$args
[
$key
]
=
'"'
.
$value
.
'"'
;
}
}
elseif
(
is_array
(
$value
))
{
$args
[
$key
]
=
'array('
.
$this
->
argumentsToString
(
$value
)
.
')'
;
}
elseif
(
$value
===
null
)
{
$args
[
$key
]
=
'null'
;
}
elseif
(
is_resource
(
$value
))
{
$args
[
$key
]
=
'resource'
;
}
if
(
is_string
(
$key
))
{
$args
[
$key
]
=
'"'
.
$key
.
'" => '
.
$args
[
$key
];
}
elseif
(
$isAssoc
)
{
$args
[
$key
]
=
$key
.
' => '
.
$args
[
$key
];
$view
=
new
View
();
echo
$view
->
renderFile
(
$this
->
view
,
array
(
'e'
=>
$exception
),
$this
);
}
}
return
implode
(
', '
,
$args
);
}
/**
*
Returns a value indicating whether the call stack is from application code
.
* @param
array $trace the trace data
* @return
boolean whether the call stack is from application code
.
*
Converts special characters to HTML entities
.
* @param
string $text to encode.
* @return
string encoded text
.
*/
public
function
isCoreCode
(
$trace
)
{
if
(
isset
(
$trace
[
'file'
]))
{
return
$trace
[
'file'
]
===
'unknown'
||
strpos
(
realpath
(
$trace
[
'file'
]),
YII_PATH
.
DIRECTORY_SEPARATOR
)
===
0
;
}
return
false
;
}
/**
* Renders the source code around the error line.
* @param string $file source file path
* @param integer $errorLine the error line number
* @param integer $maxLines maximum number of lines to display
*/
public
function
renderSourceCode
(
$file
,
$errorLine
,
$maxLines
)
public
function
htmlEncode
(
$text
)
{
$errorLine
--
;
// adjust line number to 0-based from 1-based
if
(
$errorLine
<
0
||
(
$lines
=
@
file
(
$file
))
===
false
||
(
$lineCount
=
count
(
$lines
))
<=
$errorLine
)
{
return
;
}
$halfLines
=
(
int
)(
$maxLines
/
2
);
$beginLine
=
$errorLine
-
$halfLines
>
0
?
$errorLine
-
$halfLines
:
0
;
$endLine
=
$errorLine
+
$halfLines
<
$lineCount
?
$errorLine
+
$halfLines
:
$lineCount
-
1
;
$lineNumberWidth
=
strlen
(
$endLine
+
1
);
$output
=
''
;
for
(
$i
=
$beginLine
;
$i
<=
$endLine
;
++
$i
)
{
$isErrorLine
=
$i
===
$errorLine
;
$code
=
sprintf
(
"<span class=
\"
ln"
.
(
$isErrorLine
?
' error-ln'
:
''
)
.
"
\"
>%0
{
$lineNumberWidth
}
d</span> %s"
,
$i
+
1
,
$this
->
htmlEncode
(
str_replace
(
"
\t
"
,
' '
,
$lines
[
$i
])));
if
(
!
$isErrorLine
)
{
$output
.=
$code
;
}
else
{
$output
.=
'<span class="error">'
.
$code
.
'</span>'
;
}
}
echo
'<div class="code"><pre>'
.
$output
.
'</pre></div>'
;
return
htmlspecialchars
(
$text
,
ENT_QUOTES
,
Yii
::
$app
->
charset
);
}
/**
* Renders calls stack trace
* @param array $trace
* Removes all output echoed before calling this method.
*/
public
function
renderTrace
(
$trace
)
{
$count
=
0
;
echo
"<table>
\n
"
;
foreach
(
$trace
as
$n
=>
$t
)
{
if
(
$this
->
isCoreCode
(
$t
))
{
$cssClass
=
'core collapsed'
;
}
elseif
(
++
$count
>
3
)
{
$cssClass
=
'app collapsed'
;
}
else
{
$cssClass
=
'app expanded'
;
}
$hasCode
=
isset
(
$t
[
'file'
])
&&
$t
[
'file'
]
!==
'unknown'
&&
is_file
(
$t
[
'file'
]);
echo
"<tr class=
\"
trace
$cssClass
\"
><td class=
\"
number
\"
>#
$n
</td><td class=
\"
content
\"
>"
;
echo
'<div class="trace-file">'
;
if
(
$hasCode
)
{
echo
'<div class="plus">+</div><div class="minus">-</div>'
;
}
echo
' '
;
if
(
isset
(
$t
[
'file'
]))
{
echo
$this
->
htmlEncode
(
$t
[
'file'
])
.
'('
.
$t
[
'line'
]
.
'): '
;
}
if
(
!
empty
(
$t
[
'class'
]))
{
echo
'<strong>'
.
$t
[
'class'
]
.
'</strong>'
.
$t
[
'type'
];
}
echo
'<strong>'
.
$t
[
'function'
]
.
'</strong>'
;
echo
'('
.
(
empty
(
$t
[
'args'
])
?
''
:
$this
->
htmlEncode
(
$this
->
argumentsToString
(
$t
[
'args'
])))
.
')'
;
echo
'</div>'
;
if
(
$hasCode
)
{
$this
->
renderSourceCode
(
$t
[
'file'
],
$t
[
'line'
],
$this
->
maxTraceSourceLines
);
}
echo
"</td></tr>
\n
"
;
}
echo
'</table>'
;
}
/**
* Converts special characters to HTML entities
* @param string $text text to encode
* @return string
*/
public
function
htmlEncode
(
$text
)
{
return
htmlspecialchars
(
$text
,
ENT_QUOTES
,
\Yii
::
$app
->
charset
);
}
public
function
clearOutput
()
{
// the following manual level counting is to deal with zlib.output_compression set to On
...
...
@@ -268,16 +117,4 @@ class ErrorHandler extends Component
@
ob_end_clean
();
}
}
/**
* @param \Exception $exception
*/
public
function
renderAsHtml
(
$exception
)
{
$view
=
new
View
;
$name
=
!
YII_DEBUG
||
$exception
instanceof
HttpException
?
$this
->
errorView
:
$this
->
exceptionView
;
echo
$view
->
renderFile
(
$name
,
array
(
'exception'
=>
$exception
,
),
$this
);
}
}
framework/yii/views/errorHandler.php
0 → 100644
View file @
89bbdae6
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment