mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-19 07:50:39 +08:00
New error/exception page WIP.
This commit is contained in:
@@ -21,6 +21,7 @@ class SiteController extends Controller
|
|||||||
public function actionIndex()
|
public function actionIndex()
|
||||||
{
|
{
|
||||||
throw new \yii\base\HttpException(500, 'Test exception');
|
throw new \yii\base\HttpException(500, 'Test exception');
|
||||||
|
$x = 1;
|
||||||
echo $this->render('index');
|
echo $this->render('index');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,9 +50,6 @@ h1,h2,p,img,ul li{
|
|||||||
font-family: Arial,sans-serif;
|
font-family: Arial,sans-serif;
|
||||||
color: #505050;
|
color: #505050;
|
||||||
}
|
}
|
||||||
body,html{
|
|
||||||
/*overflow-x: hidden;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/* header */
|
/* header */
|
||||||
.header{
|
.header{
|
||||||
@@ -85,70 +82,70 @@ body,html{
|
|||||||
text-shadow: 0 1px 0 #cacaca;
|
text-shadow: 0 1px 0 #cacaca;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* traceback */
|
/* call stack */
|
||||||
.traceback{
|
.call-stack{
|
||||||
margin-top: 30px;
|
margin-top: 30px;
|
||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
}
|
}
|
||||||
.traceback ul li{
|
.call-stack ul li{
|
||||||
margin: 1px 0;
|
margin: 1px 0;
|
||||||
}
|
}
|
||||||
.traceback ul li .li-wrap{
|
.call-stack ul li .element-wrap{
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 15px 0;
|
padding: 15px 0;
|
||||||
}
|
}
|
||||||
.traceback ul li.application .li-wrap{
|
.call-stack ul li.application .element-wrap{
|
||||||
background-color: #fafafa;
|
background-color: #fafafa;
|
||||||
}
|
}
|
||||||
.traceback ul li .li-wrap:hover{
|
.call-stack ul li .element-wrap:hover{
|
||||||
background-color: #edf9ff;
|
background-color: #edf9ff;
|
||||||
}
|
}
|
||||||
.traceback ul li .li{
|
.call-stack ul li .element{
|
||||||
min-width: 860px; /* 960px - 50px * 2 */
|
min-width: 860px; /* 960px - 50px * 2 */
|
||||||
max-width: 1100px; /* 1200px - 50px * 2 */
|
max-width: 1100px; /* 1200px - 50px * 2 */
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 0 50px;
|
padding: 0 50px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.traceback ul li a{
|
.call-stack ul li a{
|
||||||
color: #505050;
|
color: #505050;
|
||||||
}
|
}
|
||||||
.traceback ul li a:hover{
|
.call-stack ul li a:hover{
|
||||||
color: #000000;
|
color: #000000;
|
||||||
text-shadow: 0 1px 0 #cacaca;
|
text-shadow: 0 1px 0 #cacaca;
|
||||||
}
|
}
|
||||||
.traceback ul li .number{
|
.call-stack ul li .number{
|
||||||
width: 45px;
|
width: 45px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
.traceback ul li .text{
|
.call-stack ul li .text{
|
||||||
color: #bbbbbb;
|
color: #bbbbbb;
|
||||||
}
|
}
|
||||||
.traceback ul li.application .text{
|
.call-stack ul li.application .text{
|
||||||
color: #505050;
|
color: #505050;
|
||||||
}
|
}
|
||||||
.traceback ul li .at{
|
.call-stack ul li .at{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 110px; /* 50px + 60px */
|
right: 110px; /* 50px + 60px */
|
||||||
color: #bbbbbb;
|
color: #bbbbbb;
|
||||||
}
|
}
|
||||||
.traceback ul li.application .at{
|
.call-stack ul li.application .at{
|
||||||
color: #505050;
|
color: #505050;
|
||||||
}
|
}
|
||||||
.traceback ul li .line{
|
.call-stack ul li .line{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 50px;
|
right: 50px;
|
||||||
width: 60px;
|
width: 60px;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
.traceback ul li .code-wrap{
|
.call-stack ul li .code-wrap{
|
||||||
display: none;
|
display: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.traceback ul li.application .code-wrap{
|
.call-stack ul li.application .code-wrap{
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
.traceback ul li .error-line{
|
.call-stack ul li .error-line,.call-stack ul li .hover-line{
|
||||||
background-color: #ffebeb;
|
background-color: #ffebeb;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -156,29 +153,36 @@ body,html{
|
|||||||
z-index: 100;
|
z-index: 100;
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
}
|
}
|
||||||
.traceback ul li .code{
|
.call-stack ul li .hover-line{
|
||||||
|
background: none;
|
||||||
|
}
|
||||||
|
.call-stack ul li .hover-line.hover,.call-stack ul li .hover-line:hover{
|
||||||
|
background: #edf9ff !important;
|
||||||
|
}
|
||||||
|
.call-stack ul li .code{
|
||||||
min-width: 860px; /* 960px - 50px * 2 */
|
min-width: 860px; /* 960px - 50px * 2 */
|
||||||
max-width: 1100px; /* 1200px - 50px * 2 */
|
max-width: 1100px; /* 1200px - 50px * 2 */
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
padding: 15px 50px;
|
padding: 15px 50px;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.traceback ul li .code .lines{
|
.call-stack ul li .code .lines{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
z-index: 200;
|
z-index: 200;
|
||||||
left: 50px;
|
left: 50px;
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: Consolas, Courier New, monospaced;
|
font-family: Consolas, Courier New, monospace;
|
||||||
color: #bbbbbb;
|
color: #bbbbbb;
|
||||||
}
|
}
|
||||||
.traceback ul li .code pre{
|
.call-stack ul li .code pre{
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 200;
|
z-index: 200;
|
||||||
left: 50px;
|
left: 50px;
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: Consolas, Courier New, monospaced;
|
font-family: Consolas, Courier New, monospace;
|
||||||
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* request */
|
/* request */
|
||||||
@@ -190,15 +194,15 @@ body,html{
|
|||||||
margin-bottom: 1px;
|
margin-bottom: 1px;
|
||||||
}
|
}
|
||||||
.request pre{
|
.request pre{
|
||||||
font-family: Consolas, Courier New, monospaced;
|
font-family: Consolas, Courier New, monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* footer */
|
/* footer */
|
||||||
.footer{
|
.footer{
|
||||||
position: relative;
|
position: relative;
|
||||||
height: 222px;
|
height: 222px;
|
||||||
min-width: 860px; /* padding compensation: 960px - 50px * 2 */
|
min-width: 860px; /* 960px - 50px * 2 */
|
||||||
max-width: 1100px; /* padding compensation: 1200px - 50px * 2 */
|
max-width: 1100px; /* 1200px - 50px * 2 */
|
||||||
padding: 0 50px;
|
padding: 0 50px;
|
||||||
margin: 1px auto 0 auto;
|
margin: 1px auto 0 auto;
|
||||||
}
|
}
|
||||||
@@ -223,30 +227,7 @@ body,html{
|
|||||||
right: -50px;
|
right: -50px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* code */
|
/* highlight.js */
|
||||||
#code-wrap{
|
|
||||||
overflow: hidden;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
#code-highlighter{
|
|
||||||
background-color: #ffffff;
|
|
||||||
position: fixed;
|
|
||||||
width: 100%;
|
|
||||||
z-index: 100;
|
|
||||||
}
|
|
||||||
#code-inner-wrap{
|
|
||||||
min-width: 860px; /* padding compensation: 960px - 50px * 2 */
|
|
||||||
max-width: 1100px; /* padding compensation: 1200px - 50px * 2 */
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
pre{
|
|
||||||
display: inline;
|
|
||||||
color: #505050;
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 18px;
|
|
||||||
z-index: 200;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
pre .subst,pre .title{
|
pre .subst,pre .title{
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #505050;
|
color: #505050;
|
||||||
@@ -255,16 +236,16 @@ pre .comment,pre .template_comment,pre .javadoc,pre .diff .header{
|
|||||||
color: #808080;
|
color: #808080;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
pre .annotation,pre .decorator,pre .preprocessor,pre .doctype,pre .pi,pre .chunk,pre .shebang,
|
pre .annotation,pre .decorator,pre .preprocessor,pre .doctype,pre .pi,pre .chunk,pre .shebang,pre .apache .cbracket,
|
||||||
pre .apache .cbracket,pre .prompt,pre .http .title{
|
pre .prompt,pre .http .title{
|
||||||
color: #808000;
|
color: #808000;
|
||||||
}
|
}
|
||||||
pre .tag,pre .pi{
|
pre .tag,pre .pi{
|
||||||
background: #efefef;
|
background: #efefef;
|
||||||
}
|
}
|
||||||
pre .tag .title,pre .id,pre .attr_selector,pre .pseudo,pre .literal,pre .keyword,pre .hexcolor,
|
pre .tag .title,pre .id,pre .attr_selector,pre .pseudo,pre .literal,pre .keyword,pre .hexcolor,pre .css .function,
|
||||||
pre .css .function,pre .ini .title,pre .css .class,pre .list .title,pre .clojure .title,pre .nginx .title,
|
pre .ini .title,pre .css .class,pre .list .title,pre .clojure .title,pre .nginx .title,pre .tex .command,
|
||||||
pre .tex .command,pre .request,pre .status{
|
pre .request,pre .status{
|
||||||
color: #000080;
|
color: #000080;
|
||||||
}
|
}
|
||||||
pre .attribute,pre .rules .keyword,pre .number,pre .date,pre .regexp,pre .tex .special{
|
pre .attribute,pre .rules .keyword,pre .number,pre .date,pre .regexp,pre .tex .special{
|
||||||
|
|||||||
@@ -1,58 +1,43 @@
|
|||||||
/*;
|
|
||||||
|
|
||||||
var lines = null;
|
|
||||||
var line = document.getElementById('code-highlighter')
|
|
||||||
|
|
||||||
var updateLines = function() {
|
|
||||||
lines = document.getElementById('code').getClientRects();
|
|
||||||
};
|
|
||||||
updateLines();
|
|
||||||
window.onresize = updateLines;
|
|
||||||
window.onscroll = updateLines;
|
|
||||||
|
|
||||||
document.onmousemove = function(e) {
|
|
||||||
var event = e || window.event;
|
|
||||||
var x = event.clientX, y = event.clientY;
|
|
||||||
for (var i = 0, max = lines.length; i < max; i++) {
|
|
||||||
if (y > lines[i].top && y < lines[i].bottom) {
|
|
||||||
line.style.height = parseInt(lines[i].bottom - lines[i].top + 1) + 'px';
|
|
||||||
line.style.top = parseInt(lines[i].top) + 'px';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
window.onload = function() {
|
window.onload = function() {
|
||||||
var i, j, max, max2,
|
var i, imax,
|
||||||
codeBlocks = Sizzle('pre'),
|
codeBlocks = Sizzle('pre'),
|
||||||
traceBackItems = Sizzle('.trace-back-item');
|
callStackItems = Sizzle('.call-stack-item');
|
||||||
|
|
||||||
// highlight code
|
// highlight code blocks
|
||||||
for (i = 0, max = codeBlocks.length; i < max; i++) {
|
for (i = 0, imax = codeBlocks.length; i < imax; ++i) {
|
||||||
hljs.highlightBlock(codeBlocks[i], ' ');
|
hljs.highlightBlock(codeBlocks[i], ' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
// error lines
|
//
|
||||||
// var updateErrorLines = function() {
|
document.onmousemove = function(e) {
|
||||||
// for (i = 0, max = codeBlocks.length; i < max; i++) {
|
var lines, i, imax, j, jmax, k, kmax,
|
||||||
// var lines = codeBlocks[i].getClientRects(),
|
event = e || window.event,
|
||||||
// errorLine = codeBlocks[i].getAttribute('data-error-line'),
|
y = event.clientY,
|
||||||
// top = 0;
|
lineFound = false;
|
||||||
// if (errorLine > lines.length - 1) {
|
for (i = 0, imax = codeBlocks.length; i < imax; ++i) {
|
||||||
// errorLine = lines.length - 1;
|
lines = codeBlocks[i].getClientRects();
|
||||||
// }
|
for (j = 0, jmax = lines.length; j < jmax; ++j) {
|
||||||
// for (j = 0; j < errorLine; j++) {
|
if (y > lines[j].top && y < lines[j].bottom) {
|
||||||
// top += lines[j].height;
|
lineFound = true;
|
||||||
// }
|
break;
|
||||||
// Sizzle('.error-line', codeBlocks[i].parentNode.parentNode)[0].style.marginTop = top + 'px';
|
}
|
||||||
// }
|
}
|
||||||
// };
|
if (lineFound) {
|
||||||
// updateErrorLines();
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var hoverLines = Sizzle('.hover-line');
|
||||||
|
for (k = 0, kmax = hoverLines.length; k < kmax; ++k) {
|
||||||
|
hoverLines[k].className = 'hover-line';
|
||||||
|
}
|
||||||
|
if (lineFound) {
|
||||||
|
Sizzle('.call-stack-item:eq(' + i + ') .hover-line:eq(' + j + ')')[0].className = 'hover-line hover';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// toggle code block visibility of each trace back item
|
// toggle code block visibility
|
||||||
for (i = 0, max = traceBackItems.length; i < max; i++) {
|
for (i = 0, imax = callStackItems.length; i < imax; i++) {
|
||||||
Sizzle('.li-wrap', traceBackItems[i])[0].addEventListener('click', function() {
|
Sizzle('.element-wrap', callStackItems[i])[0].addEventListener('click', function() {
|
||||||
var code = Sizzle('.code-wrap', this.parentNode)[0];
|
var code = Sizzle('.code-wrap', this.parentNode)[0];
|
||||||
code.style.display = window.getComputedStyle(code).display == 'block' ? 'none' : 'block';
|
code.style.display = window.getComputedStyle(code).display == 'block' ? 'none' : 'block';
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ use Yii;
|
|||||||
* nature of the errors and the mode the application runs at.
|
* nature of the errors and the mode the application runs at.
|
||||||
*
|
*
|
||||||
* @author Qiang Xue <qiang.xue@gmail.com>
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
||||||
|
* @author Timur Ruziev <resurtm@gmail.com>
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
*/
|
*/
|
||||||
class ErrorHandler extends Component
|
class ErrorHandler extends Component
|
||||||
@@ -42,7 +43,11 @@ class ErrorHandler extends Component
|
|||||||
/**
|
/**
|
||||||
* @var string the path of the view file for rendering exceptions and errors.
|
* @var string the path of the view file for rendering exceptions and errors.
|
||||||
*/
|
*/
|
||||||
public $view = '@yii/views/errorHandler.php';
|
public $mainView = '@yii/views/errorHandler/main.php';
|
||||||
|
/**
|
||||||
|
* @var string the path of the view file for rendering exceptions and errors call stack element.
|
||||||
|
*/
|
||||||
|
public $callStackItemView = '@yii/views/errorHandler/callStackItem.php';
|
||||||
/**
|
/**
|
||||||
* @var \Exception the exception that is being handled currently.
|
* @var \Exception the exception that is being handled currently.
|
||||||
*/
|
*/
|
||||||
@@ -56,11 +61,9 @@ class ErrorHandler extends Component
|
|||||||
public function handle($exception)
|
public function handle($exception)
|
||||||
{
|
{
|
||||||
$this->exception = $exception;
|
$this->exception = $exception;
|
||||||
|
|
||||||
if ($this->discardExistingOutput) {
|
if ($this->discardExistingOutput) {
|
||||||
$this->clearOutput();
|
$this->clearOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->renderException($exception);
|
$this->renderException($exception);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,9 +93,8 @@ class ErrorHandler extends Component
|
|||||||
if (YII_DEBUG) {
|
if (YII_DEBUG) {
|
||||||
ini_set('display_errors', 1);
|
ini_set('display_errors', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
$view = new View();
|
$view = new View();
|
||||||
echo $view->renderFile($this->view, array('e' => $exception), $this);
|
echo $view->renderFile($this->mainView, array('e' => $exception), $this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,7 +102,7 @@ class ErrorHandler extends Component
|
|||||||
/**
|
/**
|
||||||
* Converts special characters to HTML entities.
|
* Converts special characters to HTML entities.
|
||||||
* @param string $text to encode.
|
* @param string $text to encode.
|
||||||
* @return string encoded text.
|
* @return string encoded original text.
|
||||||
*/
|
*/
|
||||||
public function htmlEncode($text)
|
public function htmlEncode($text)
|
||||||
{
|
{
|
||||||
@@ -117,4 +119,109 @@ class ErrorHandler extends Component
|
|||||||
@ob_end_clean();
|
@ob_end_clean();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds informational links to the given PHP type/class.
|
||||||
|
* @param string $code type/class name to be linkified.
|
||||||
|
* @return string linkified with HTML type/class name.
|
||||||
|
*/
|
||||||
|
public function addTypeLinks($code)
|
||||||
|
{
|
||||||
|
$html = '';
|
||||||
|
if (strpos($code, '\\') !== false) {
|
||||||
|
// namespaced class
|
||||||
|
foreach (explode('\\', $code) as $part) {
|
||||||
|
$html .= '<a href="http://yiiframework.com/doc/api/2.0/' . $this->htmlEncode($part) . '" target="_blank">' . $this->htmlEncode($part) . '</a>\\';
|
||||||
|
}
|
||||||
|
$html = rtrim($html, '\\');
|
||||||
|
}
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates HTML containing link to the page with the information on given HTTP status code.
|
||||||
|
* @param integer $statusCode to be used to generate information link.
|
||||||
|
* @return string generated HTML with HTTP status code information.
|
||||||
|
*/
|
||||||
|
public function createHttpStatusLink($statusCode)
|
||||||
|
{
|
||||||
|
return '<a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#' . (int)$statusCode .'" target="_blank">' . (int)$statusCode . '</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders a single call stack element.
|
||||||
|
* @param string $file name where call has happened.
|
||||||
|
* @param integer $line number on which call has happened.
|
||||||
|
* @param integer $index number of the call stack element.
|
||||||
|
* @return string HTML content of the rendered call stack element.
|
||||||
|
*/
|
||||||
|
public function renderCallStackItem($file, $line, $index)
|
||||||
|
{
|
||||||
|
$line--; // adjust line number from one-based to zero-based
|
||||||
|
$lines = @file($file);
|
||||||
|
if ($line < 0 || $lines === false || ($lineCount = count($lines)) < $line + 1) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
$half = (int)(($index == 0 ? $this->maxSourceLines : $this->maxTraceSourceLines) / 2);
|
||||||
|
$begin = $line - $half > 0 ? $line - $half : 0;
|
||||||
|
$end = $line + $half < $lineCount ? $line + $half : $lineCount - 1;
|
||||||
|
|
||||||
|
$view = new View();
|
||||||
|
return $view->renderFile($this->callStackItemView, array(
|
||||||
|
'file' => $file,
|
||||||
|
'line' => $line,
|
||||||
|
'index' => $index,
|
||||||
|
'lines' => $lines,
|
||||||
|
'begin' => $begin,
|
||||||
|
'end' => $end,
|
||||||
|
), $this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether given name of the file belongs to the framework.
|
||||||
|
* @param string $file name to be checked.
|
||||||
|
* @return boolean whether given name of the file belongs to the framework.
|
||||||
|
*/
|
||||||
|
public function isCoreFile($file)
|
||||||
|
{
|
||||||
|
return $file === 'unknown' || strpos(realpath($file), YII_PATH . DIRECTORY_SEPARATOR) === 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates string containing HTML link which refers to the home page of determined web-server software
|
||||||
|
* and its full name.
|
||||||
|
* @return string server software information hyperlink.
|
||||||
|
*/
|
||||||
|
public function createServerInformationLink()
|
||||||
|
{
|
||||||
|
static $serverUrls = array(
|
||||||
|
'http://httpd.apache.org/' => array('apache'),
|
||||||
|
'http://nginx.org/' => array('nginx'),
|
||||||
|
'http://lighttpd.net/' => array('lighttpd'),
|
||||||
|
'http://gwan.com/' => array('g-wan', 'gwan'),
|
||||||
|
'http://iis.net/' => array('iis', 'services'),
|
||||||
|
'http://php.net/manual/en/features.commandline.webserver.php' => array('development'),
|
||||||
|
);
|
||||||
|
if (isset($_SERVER['SERVER_SOFTWARE'])) {
|
||||||
|
foreach ($serverUrls as $url => $keywords) {
|
||||||
|
foreach ($keywords as $keyword) {
|
||||||
|
if (stripos($_SERVER['SERVER_SOFTWARE'], $keyword) !== false ) {
|
||||||
|
return '<a href="' . $url . '" target="_blank">' . $this->htmlEncode($_SERVER['SERVER_SOFTWARE']) . '</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates string containing HTML link which refers to the page with the current version
|
||||||
|
* of the framework and version number text.
|
||||||
|
* @return string framework version information hyperlink.
|
||||||
|
*/
|
||||||
|
public function createFrameworkVersionLink()
|
||||||
|
{
|
||||||
|
return '<a href="http://github.com/yiisoft/yii2/" target="_blank">' . $this->htmlEncode(Yii::getVersion()) . '</a>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,209 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* @var \yii\base\View $this
|
|
||||||
* @var \Exception $e
|
|
||||||
* @var \yii\base\ErrorHandler $c
|
|
||||||
*/
|
|
||||||
$c = $this->context;
|
|
||||||
?>
|
|
||||||
<!doctype html>
|
|
||||||
<html lang="en-us">
|
|
||||||
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8"/>
|
|
||||||
|
|
||||||
<title></title>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="/tmp/main.css"/>
|
|
||||||
|
|
||||||
<script type="text/javascript" src="/tmp/highlight.js"></script>
|
|
||||||
<script type="text/javascript" src="/tmp/sizzle.min.js"></script>
|
|
||||||
<script type="text/javascript" src="/tmp/main.js"></script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<?php ob_start(); ob_implicit_flush(false); ?>
|
|
||||||
<div class="code-wrap">
|
|
||||||
<div class="error-line" style="top: <?php echo 18 * (1 + 1); ?>px;"></div>
|
|
||||||
<div class="hover-line"></div>
|
|
||||||
<div class="code">
|
|
||||||
<span class="lines">
|
|
||||||
10<br/>11<br/>12<br/>13<br/>14<br/>15<br/>16<br/>17<br/>18<br/>19<br/>20<br/>21<br/>22<br/>
|
|
||||||
23<br/>24<br/>25<br/>26<br/>27<br/>28<br/>29<br/>30<br/>31<br/>32<br/>33<br/>34
|
|
||||||
</span>
|
|
||||||
<pre> {
|
|
||||||
return array(
|
|
||||||
'captcha' => array(
|
|
||||||
'class' => 'yii\web\CaptchaAction',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function actionIndex()
|
|
||||||
{
|
|
||||||
// throw new \yii\base\HttpException(500);
|
|
||||||
$x = null;
|
|
||||||
$x->y = 1;
|
|
||||||
|
|
||||||
echo $this->render('index');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function actionLogin()
|
|
||||||
{
|
|
||||||
$model = new LoginForm();
|
|
||||||
if ($this->populate($_POST, $model) && $model->login()) {
|
|
||||||
Yii::$app->response->redirect(array('site/index'));
|
|
||||||
} else {
|
|
||||||
echo $this->render('login', array(
|
|
||||||
'model' => $model,</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php $codeBlock = ob_get_clean(); ?>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="header">
|
|
||||||
<img src="/tmp/attention.png" alt="Attention"/>
|
|
||||||
<h1><span>Exception</span> – <a href="#">yii</a>\<a href="#">base</a>\<a href="#">HttpException</a> – 404</h1>
|
|
||||||
<h2>Requested user cannot be found!</h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="traceback">
|
|
||||||
<ul>
|
|
||||||
<li class="application trace-back-item">
|
|
||||||
<div class="li-wrap">
|
|
||||||
<div class="li">
|
|
||||||
<span class="number">1.</span>
|
|
||||||
<span class="text">in C:\_work\jetbrains\yii2\apps\bootstrap\protected\controllers\SiteController.php</span>
|
|
||||||
<span class="at">at line</span>
|
|
||||||
<span class="line">22</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php echo $codeBlock; ?>
|
|
||||||
</li>
|
|
||||||
<li class="trace-back-item">
|
|
||||||
<div class="li-wrap">
|
|
||||||
<div class="li">
|
|
||||||
<span class="number">2.</span>
|
|
||||||
<span class="text">at C:\_work\jetbrains\yii2\yii\base\InlineAction.php –</span>
|
|
||||||
<span class="call"><a href="#">call_user_func_array</a>()</span>
|
|
||||||
<span class="at">at line</span>
|
|
||||||
<span class="line">47</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php echo $codeBlock; ?>
|
|
||||||
</li>
|
|
||||||
<li class="trace-back-item">
|
|
||||||
<div class="li-wrap">
|
|
||||||
<div class="li">
|
|
||||||
<span class="number">3.</span>
|
|
||||||
<span class="text">at C:\_work\jetbrains\yii2\yii\base\Controller.php –</span>
|
|
||||||
<span class="call"><a href="#">yii</a>\<a href="#">base</a>\<a href="#">InlineAction</a>→<a href="#">runWithParams</a>()</span>
|
|
||||||
<span class="at">at line</span>
|
|
||||||
<span class="line">117</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php echo $codeBlock; ?>
|
|
||||||
</li>
|
|
||||||
<li class="trace-back-item">
|
|
||||||
<div class="li-wrap">
|
|
||||||
<div class="li">
|
|
||||||
<span class="number">4.</span>
|
|
||||||
<span class="text">at C:\_work\jetbrains\yii2\yii\web\Application.php –</span>
|
|
||||||
<span class="call"><a href="#">yii</a>\<a href="#">base</a>\<a href="#">Module</a>→<a href="#">runAction</a>()</span>
|
|
||||||
<span class="at">at line</span>
|
|
||||||
<span class="line">35</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php echo $codeBlock; ?>
|
|
||||||
</li>
|
|
||||||
<li class="trace-back-item">
|
|
||||||
<div class="li-wrap">
|
|
||||||
<div class="li">
|
|
||||||
<span class="number">5.</span>
|
|
||||||
<span class="text">at C:\_work\jetbrains\yii2\yii\web\Application.php –</span>
|
|
||||||
<span class="call"><a href="#">yii</a>\<a href="#">base</a>\<a href="#">Module</a>→<a href="#">runAction</a>()</span>
|
|
||||||
<span class="at">at line</span>
|
|
||||||
<span class="line">35</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php echo $codeBlock; ?>
|
|
||||||
</li>
|
|
||||||
<li class="trace-back-item">
|
|
||||||
<div class="li-wrap">
|
|
||||||
<div class="li">
|
|
||||||
<span class="number">6.</span>
|
|
||||||
<span class="text">at C:\_work\jetbrains\yii2\yii\base\Application.php –</span>
|
|
||||||
<span class="call"><a href="#">yii</a>\<a href="#">web</a>\<a href="#">Application</a>→<a href="#">processRequest</a>()</span>
|
|
||||||
<span class="at">at line</span>
|
|
||||||
<span class="line">146</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php echo $codeBlock; ?>
|
|
||||||
</li>
|
|
||||||
<li class="application trace-back-item">
|
|
||||||
<div class="li-wrap">
|
|
||||||
<div class="li">
|
|
||||||
<span class="number">7.</span>
|
|
||||||
<span class="text">at C:\_work\jetbrains\yii2\apps\bootstrap\index.php – </span>
|
|
||||||
<span class="call"><a href="#">yii</a>\<a href="#">base</a>\<a href="#">Application</a>→<a href="#">run</a>()</span>
|
|
||||||
<span class="at">at line</span>
|
|
||||||
<span class="line">14</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<?php echo $codeBlock; ?>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<?php /*
|
|
||||||
<div class="request">
|
|
||||||
<div id="code-wrap"></div>
|
|
||||||
<div id="code-highlighter"></div>
|
|
||||||
<div id="code-inner-wrap">
|
|
||||||
<pre id="code">$_GET = [
|
|
||||||
'show-post' => 100,
|
|
||||||
'refresh-page' => 'yes',
|
|
||||||
'ascending-sort' => 1,
|
|
||||||
];
|
|
||||||
|
|
||||||
$_POST = [
|
|
||||||
'blog-post-form' => [
|
|
||||||
'title' => 'hello',
|
|
||||||
'author_id' => '12',
|
|
||||||
],
|
|
||||||
];
|
|
||||||
|
|
||||||
$_SERVER = [
|
|
||||||
'DOCUMENT_ROOT' => '/home/resurtm/work/data',
|
|
||||||
'REMOTE_ADDR' => '::1',
|
|
||||||
'REMOTE_PORT' => '52694',
|
|
||||||
'SERVER_SOFTWARE' => 'PHP 5.4.3 Development Server',
|
|
||||||
'SERVER_PROTOCOL' => 'HTTP/1.1',
|
|
||||||
'SERVER_NAME' => 'localhost',
|
|
||||||
'SERVER_PORT' => '8000',
|
|
||||||
'REQUEST_URI' => '/index.php?post-form[title]=hello&post-form[author_id]=12',
|
|
||||||
'REQUEST_METHOD' => 'GET',
|
|
||||||
'SCRIPT_NAME' => '/index.php',
|
|
||||||
'SCRIPT_FILENAME' => '/home/resurtm/work/data/index.php',
|
|
||||||
'PHP_SELF' => '/index.php',
|
|
||||||
'QUERY_STRING' => 'post-form[title]=hello&post-form[author_id]=12',
|
|
||||||
'HTTP_HOST' => 'localhost:8000',
|
|
||||||
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0',
|
|
||||||
'HTTP_ACCEPT_LANGUAGE' => 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
|
|
||||||
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate',
|
|
||||||
'HTTP_CONNECTION' => 'keep-alive',
|
|
||||||
'REQUEST_TIME_FLOAT' => 1369146454.0856,
|
|
||||||
'REQUEST_TIME' => 1369146454,
|
|
||||||
];</pre>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>*/ ?>
|
|
||||||
|
|
||||||
<div class="footer">
|
|
||||||
<img src="/tmp/logo.png" alt="Yii Framework"/>
|
|
||||||
<p class="timestamp">2013-05-16, 19:14:12</p>
|
|
||||||
<p><a href="http://php.net/manual/en/features.commandline.webserver.php">PHP 5.4.3 Development Server</a></p>
|
|
||||||
<p><a href="http://yiiframework.com/">Yii Framework</a>/<a href="#">2.0-dev</a></p>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
34
framework/yii/views/errorHandler/callStackItem.php
Normal file
34
framework/yii/views/errorHandler/callStackItem.php
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @var \yii\base\View $this
|
||||||
|
* @var \yii\base\ErrorHandler $c
|
||||||
|
* @var string $file
|
||||||
|
* @var integer $line
|
||||||
|
* @var integer $index
|
||||||
|
* @var string[] $lines
|
||||||
|
* @var integer $begin
|
||||||
|
* @var integer $end
|
||||||
|
*/
|
||||||
|
$c = $this->context;
|
||||||
|
?>
|
||||||
|
|
||||||
|
<li class="<?php if (!$c->isCoreFile($file)) echo 'application'; ?> call-stack-item">
|
||||||
|
<div class="element-wrap">
|
||||||
|
<div class="element">
|
||||||
|
<span class="number"><?php echo (int)$index; ?>.</span>
|
||||||
|
<span class="text">in <?php echo $c->htmlEncode($file); ?></span>
|
||||||
|
<span class="at">at line</span>
|
||||||
|
<span class="line"><?php echo (int)$line; ?></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="code-wrap">
|
||||||
|
<div class="error-line" style="top: <?php echo 18 * (int)($line - $begin); ?>px;"></div>
|
||||||
|
<?php for ($i = $begin; $i <= $end; ++$i): ?>
|
||||||
|
<div class="hover-line" style="top: <?php echo 18 * (int)($i - $begin); ?>px;"></div>
|
||||||
|
<?php endfor; ?>
|
||||||
|
<div class="code">
|
||||||
|
<span class="lines"><?php for ($i = $begin; $i <= $end; ++$i) echo (int)$i . '<br/>'; ?></span>
|
||||||
|
<pre><?php for ($i = $begin; $i <= $end; ++$i) echo $c->htmlEncode($lines[$i]); ?></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
101
framework/yii/views/errorHandler/main.php
Normal file
101
framework/yii/views/errorHandler/main.php
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @var \yii\base\View $this
|
||||||
|
* @var \Exception $e
|
||||||
|
* @var \yii\base\ErrorHandler $c
|
||||||
|
*/
|
||||||
|
$c = $this->context;
|
||||||
|
?>
|
||||||
|
<!doctype html>
|
||||||
|
<html lang="en-us">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
|
||||||
|
<?php if ($e instanceof \yii\base\Exception): ?>
|
||||||
|
<title><?php echo $c->htmlEncode($e->getName() . ' – ' . get_class($e)); ?></title>
|
||||||
|
<?php else: ?>
|
||||||
|
<title><?php echo $c->htmlEncode(get_class($e)); ?></title>
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/tmp/main.css"/>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="/tmp/highlight.js"></script>
|
||||||
|
<script type="text/javascript" src="/tmp/sizzle.min.js"></script>
|
||||||
|
<script type="text/javascript" src="/tmp/main.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div class="header">
|
||||||
|
<img src="/tmp/attention.png" alt="Attention"/>
|
||||||
|
<h1>
|
||||||
|
<span>Exception</span> – <?php echo $c->addTypeLinks(get_class($e)); ?>
|
||||||
|
<?php if ($e instanceof \yii\base\HttpException): ?>
|
||||||
|
– <?php echo $c->createHttpStatusLink($e->statusCode); ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</h1>
|
||||||
|
<h2><?php echo $c->htmlEncode($e->getName()); ?></h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="call-stack">
|
||||||
|
<ul>
|
||||||
|
<?php echo $c->renderCallStackItem($e->getFile(), $e->getLine(), 1); ?>
|
||||||
|
<?php for ($i = 1, $trace = $e->getTrace(), $length = count($trace); $i < $length; ++$i): ?>
|
||||||
|
<?php echo $c->renderCallStackItem($trace[$i]['file'], $trace[$i]['line'], $i + 1); ?>
|
||||||
|
<?php endfor; ?>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<?php /*
|
||||||
|
<div class="request">
|
||||||
|
<div id="code-wrap"></div>
|
||||||
|
<div id="code-highlighter"></div>
|
||||||
|
<div id="code-inner-wrap">
|
||||||
|
<pre id="code">$_GET = [
|
||||||
|
'show-post' => 100,
|
||||||
|
'refresh-page' => 'yes',
|
||||||
|
'ascending-sort' => 1,
|
||||||
|
];
|
||||||
|
|
||||||
|
$_POST = [
|
||||||
|
'blog-post-form' => [
|
||||||
|
'title' => 'hello',
|
||||||
|
'author_id' => '12',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$_SERVER = [
|
||||||
|
'DOCUMENT_ROOT' => '/home/resurtm/work/data',
|
||||||
|
'REMOTE_ADDR' => '::1',
|
||||||
|
'REMOTE_PORT' => '52694',
|
||||||
|
'SERVER_SOFTWARE' => 'PHP 5.4.3 Development Server',
|
||||||
|
'SERVER_PROTOCOL' => 'HTTP/1.1',
|
||||||
|
'SERVER_NAME' => 'localhost',
|
||||||
|
'SERVER_PORT' => '8000',
|
||||||
|
'REQUEST_URI' => '/index.php?post-form[title]=hello&post-form[author_id]=12',
|
||||||
|
'REQUEST_METHOD' => 'GET',
|
||||||
|
'SCRIPT_NAME' => '/index.php',
|
||||||
|
'SCRIPT_FILENAME' => '/home/resurtm/work/data/index.php',
|
||||||
|
'PHP_SELF' => '/index.php',
|
||||||
|
'QUERY_STRING' => 'post-form[title]=hello&post-form[author_id]=12',
|
||||||
|
'HTTP_HOST' => 'localhost:8000',
|
||||||
|
'HTTP_USER_AGENT' => 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0',
|
||||||
|
'HTTP_ACCEPT_LANGUAGE' => 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
|
||||||
|
'HTTP_ACCEPT_ENCODING' => 'gzip, deflate',
|
||||||
|
'HTTP_CONNECTION' => 'keep-alive',
|
||||||
|
'REQUEST_TIME_FLOAT' => 1369146454.0856,
|
||||||
|
'REQUEST_TIME' => 1369146454,
|
||||||
|
];</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>*/ ?>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
<img src="/tmp/logo.png" alt="Yii Framework"/>
|
||||||
|
<p class="timestamp"><?php echo date('Y-m-d, H:i:s'); ?></p>
|
||||||
|
<p><?php echo $c->createServerInformationLink(); ?></p>
|
||||||
|
<p><a href="http://yiiframework.com/">Yii Framework</a>/<?php echo $c->createFrameworkVersionLink(); ?></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user