Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
If you use TextMate on your PHP project using the Yii application framework, place this file in protected/views/system. Then your stack trace will have clickable links to the code in question. Also it will summarize the $_REQUEST and $_SESSION variables a
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title><?php echo CHtml::encode($data['type'])?></title>
<style type="text/css">
/*<![CDATA[*/
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;margin:0;padding:0;}
body{line-height:1;}
ol,ul{list-style:none;}
blockquote,q{quotes:none;}
blockquote:before,blockquote:after,q:before,q:after{content:none;}
:focus{outline:0;}
ins{text-decoration:none;}
del{text-decoration:line-through;}
table{border-collapse:collapse;border-spacing:0;}
body {
font: normal 9pt "Verdana";
color: #000;
background: #fff;
}
h1 {
font: normal 18pt "Verdana";
color: #f00;
margin-bottom: .5em;
}
h2 {
font: normal 14pt "Verdana";
color: #800000;
margin-bottom: .5em;
}
h3 {
font: bold 11pt "Verdana";
}
pre {
font: normal 11pt Menlo, Consolas, "Lucida Console";
}
pre span.error {
display: block;
background: #fce3e3;
}
pre span.ln {
color: #999;
padding-right: 0.5em;
border-right: 1px solid #ccc;
}
pre span.error-ln {
font-weight: bold;
}
.container {
margin: 1em 4em;
}
.version {
color: gray;
font-size: 8pt;
border-top: 1px solid #aaa;
padding-top: 1em;
margin-bottom: 1em;
}
.message {
color: #000;
padding: 1em;
font-size: 11pt;
background: #f3f3f3;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
margin-bottom: 1em;
line-height: 160%;
}
.source {
margin-bottom: 1em;
}
.code pre {
background-color: #ffe;
margin: 0.5em 0;
padding: 0.5em;
line-height: 125%;
border: 1px solid #eee;
}
.source .file {
margin-bottom: 1em;
font-weight: bold;
}
.traces {
margin: 2em 0;
}
.trace {
margin: 0.5em 0;
padding: 0.5em;
}
.trace.app {
border: 1px dashed #c00;
}
.trace .number {
text-align: right;
width: 2em;
padding: 0.5em;
}
.trace .content {
padding: 0.5em;
}
.trace .plus,
.trace .minus {
display:inline;
vertical-align:middle;
text-align:center;
border:1px solid #000;
color:#000;
font-size:10px;
line-height:10px;
margin:0;
padding:0 1px;
width:10px;
height:10px;
}
.trace.collapsed .minus,
.trace.expanded .plus,
.trace.collapsed pre {
display: none;
}
.trace-file {
cursor: pointer;
padding: 0.2em;
}
.trace-file:hover {
background: #f0ffff;
}
/*]]>*/
</style>
</head>
<body>
<div class="container">
<h1><?php echo $data['type']?> in <?php echo Yii::app()->controller->id ?>#<?php echo Yii::app()->controller->action->id ?> on line <?php echo $data['line']; ?></h1>
<p class="message">
<?php echo nl2br(CHtml::encode($data['message']))?>
</p>
<div class="source">
<p class="file"><?php echo CHtml::link(CHtml::encode($data['file']), 'txmt://open?url=file://'.$data['file'].'&line='.$data['line'])."(".$data['line'].")"; ?></p>
<?php echo $this->renderSourceCode($data['file'],$data['line'],$this->maxSourceLines); ?>
</div>
<div class="traces">
<h2>Stack Trace</h2>
<?php $count=0; ?>
<table style="width:100%;">
<?php foreach($data['traces'] as $n => $trace): ?>
<?php
if($this->isCoreCode($trace))
$cssClass='core collapsed';
else if(++$count>3)
$cssClass='app collapsed';
else
$cssClass='app expanded';
$hasCode=$trace['file']!=='unknown' && is_file($trace['file']);
?>
<tr class="trace <?php echo $cssClass; ?>">
<td class="number">
#<?php echo $n; ?>
</td>
<td class="content">
<div class="trace-file">
<?php if($hasCode): ?>
<div class="plus">+</div>
<div class="minus"></div>
<?php endif; ?>
<?php
echo '&nbsp;';
echo CHtml::link(CHtml::encode($trace['file']), 'txmt://open?url=file://'.$trace['file'].'&line='.$trace['line'])."(".$trace['line'].")";
// echo CHtml::encode($trace['file'])."(".$trace['line'].")";
echo ': ';
if(!empty($trace['class']))
echo "<strong>{$trace['class']}</strong>{$trace['type']}";
echo "<strong>{$trace['function']}</strong>(";
if(!empty($trace['args']))
echo CHtml::encode($this->argumentsToString($trace['args']));
echo ')';
?>
</div>
<?php if($hasCode) echo $this->renderSourceCode($trace['file'],$trace['line'],$this->maxTraceSourceLines); ?>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
<div class="params">
<h2>Parameters</h2>
<ul>
<?php foreach($_REQUEST as $key => $param) { ?>
<li><?php echo $key ?>: <?php var_dump($param) ?></li>
<?php } ?>
</ul>
</div>
<div class="params">
<h2>Session</h2>
<ul>
<?php foreach($_SESSION as $key => $param) { ?>
<li><?php echo $key ?>: <?php var_dump($param) ?></li>
<?php } ?>
</ul>
</div>
<div class="version">
<?php echo date('Y-m-d H:i:s',$data['time']) .' '. $data['version']; ?>
</div>
</div>
<script type="text/javascript">
/*<![CDATA[*/
var traceReg = new RegExp("(^|\\s)trace-file(\\s|$)");
var collapsedReg = new RegExp("(^|\\s)collapsed(\\s|$)");
var e = document.getElementsByTagName("div");
for(var j=0,len=e.length;j<len;j++){
if(traceReg.test(e[j].className)){
e[j].onclick = function(){
var trace = this.parentNode.parentNode;
if(collapsedReg.test(trace.className))
trace.className = trace.className.replace("collapsed", "expanded");
else
trace.className = trace.className.replace("expanded", "collapsed");
}
}
}
/*]]>*/
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment