Skip to content

Commit

Permalink
Reorg Rain Lib for Laravel 5
Browse files Browse the repository at this point in the history
  • Loading branch information
daftspunk committed Jan 28, 2015
1 parent c00d6f2 commit 6a68036
Show file tree
Hide file tree
Showing 44 changed files with 768 additions and 89 deletions.
2 changes: 1 addition & 1 deletion src/Database/ModelException.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?php namespace October\Rain\Database;

use October\Rain\Support\ValidationException;
use October\Rain\Exception\ValidationException;

/**
* Used when validation fails. Contains the invalid model for easy analysis.
Expand Down
12 changes: 12 additions & 0 deletions src/Exception/ApplicationException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php namespace October\Rain\Exception;

/**
* This class represents an application exception.
* Application exceptions are not logged in the error log.
*
* @package october\system
* @author Alexey Bobkov, Samuel Georges
*/
class ApplicationException extends ExceptionBase
{
}
117 changes: 117 additions & 0 deletions src/Exception/ErrorHandler.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<?php namespace October\Rain\Exception;

use App;
use Request;
use Response;

/**
* System Error Handler, this class handles application exception events.
*
* @package october\system
* @author Alexey Bobkov, Samuel Georges
*/
class ErrorHandler
{
/**
* @var System\Classes\ExceptionBase A prepared mask exception used to mask any exception fired.
*/
protected static $activeMask;

/**
* @var array A collection of masks, so multiples can be applied in order.
*/
protected static $maskLayers = [];

/**
* All exceptions are piped through this method from the framework workflow. This method will mask
* any foreign exceptions with a "scent" of the native application's exception, so it can render
* correctly when displayed on the error page.
* @param Exception $proposedException The exception candidate that has been thrown.
* @return mixed Error page contents
*/
public function handleException(\Exception $proposedException, $httpCode = 500)
{
// Disable the error handler for test and CLI environment
if (App::runningUnitTests() || App::runningInConsole()) {
return;
}

// Detect AJAX request and use error 500
if (Request::ajax()) {
return Response::make($proposedException->getMessage(), $httpCode);
}

// Clear the output buffer
while (ob_get_level()) {
ob_end_clean();
}

// Friendly error pages are used
if (($customError = $this->handleCustomError()) !== null) {
return $customError;
}

// If the exception is already our brand, use it.
if ($proposedException instanceof BaseException) {
$exception = $proposedException;
}
// If there is an active mask prepared, use that.
elseif (static::$activeMask !== null) {
$exception = static::$activeMask;
$exception->setMask($proposedException);
}
// Otherwise we should mask it with our own default scent.
else {
$exception = new ApplicationException($proposedException->getMessage(), 0);
$exception->setMask($proposedException);
}

return $this->handleDetailedError($exception);
}

/**
* Prepares a mask exception to be used when any exception fires.
* @param Exception $exception The mask exception.
* @return void
*/
public static function applyMask(\Exception $exception)
{
if (static::$activeMask !== null) {
array_push(static::$maskLayers, static::$activeMask);
}

static::$activeMask = $exception;
}

/**
* Destroys the prepared mask by applyMask()
* @return void
*/
public static function removeMask()
{
if (count(static::$maskLayers) > 0) {
static::$activeMask = array_pop(static::$maskLayers);
}
else {
static::$activeMask = null;
}
}

/**
* Check if using a custom error page, if so return the contents.
* Return NULL if a custom error is not set up.
* @return mixed Error page contents.
*/
public function handleCustomError()
{
}

/**
* Displays the detailed system exception page.
* @return View Object containing the error page.
*/
public function handleDetailedError($exception)
{
return 'Error: ' . $exception->getMessage();
}
}
Loading

0 comments on commit 6a68036

Please sign in to comment.