Commit b0434829 authored by Taylor Otwell's avatar Taylor Otwell

Improve view errors.

parent 633c2bde
...@@ -15,6 +15,18 @@ class Error { ...@@ -15,6 +15,18 @@ class Error {
ob_get_level() and ob_end_clean(); ob_get_level() and ob_end_clean();
$message = $exception->getMessage();
// For Laravel view errors we want to show a prettier error:
$file = $exception->getFile();
if (str_contains($exception->getFile(), 'eval()') and str_contains($exception->getFile(), 'laravel/view.php'))
{
$message = 'Error rendering view: ['.View::$last['name'].']'.PHP_EOL.PHP_EOL.$message;
$file = View::$last['path'];
}
// If detailed errors are enabled, we'll just format the exception into // If detailed errors are enabled, we'll just format the exception into
// a simple error message and display it on the screen. We don't use a // a simple error message and display it on the screen. We don't use a
// View in case the problem is in the View class. // View in case the problem is in the View class.
...@@ -22,9 +34,9 @@ class Error { ...@@ -22,9 +34,9 @@ class Error {
{ {
echo "<html><h2>Unhandled Exception</h2> echo "<html><h2>Unhandled Exception</h2>
<h3>Message:</h3> <h3>Message:</h3>
<pre>".$exception->getMessage()."</pre> <pre>".$message."</pre>
<h3>Location:</h3> <h3>Location:</h3>
<pre>".$exception->getFile()." on line ".$exception->getLine()."</pre>"; <pre>".$file." on line ".$exception->getLine()."</pre>";
if ($trace) if ($trace)
{ {
......
...@@ -44,6 +44,13 @@ class View implements ArrayAccess { ...@@ -44,6 +44,13 @@ class View implements ArrayAccess {
*/ */
public static $cache = array(); public static $cache = array();
/**
* THe last view to be rendered.
*
* @var string
*/
public static $last;
/** /**
* The Laravel view loader event name. * The Laravel view loader event name.
* *
...@@ -387,6 +394,8 @@ class View implements ArrayAccess { ...@@ -387,6 +394,8 @@ class View implements ArrayAccess {
*/ */
protected function load() protected function load()
{ {
static::$last = array('name' => $this->view, 'path' => $this->path);
if (isset(static::$cache[$this->path])) if (isset(static::$cache[$this->path]))
{ {
return static::$cache[$this->path]; return static::$cache[$this->path];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment