Errors and exceptions handling, #16
git-svn-id: svn+ssh://code.netmonsters.ru/svn/majestic/branches/evo@122 4cb57b5f-5bbd-dd11-951b-001d605cbbc5
This commit is contained in:
2
Load.php
2
Load.php
@ -53,7 +53,7 @@ class Load
|
|||||||
trigger_error('Can\'t create directory: "' . $dir . '"', E_USER_ERROR);
|
trigger_error('Can\'t create directory: "' . $dir . '"', E_USER_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
$scan = array(PATH . '/lib', PATH . '/' . APP . '/src');
|
$scan = array(PATH . '/' . APP . '/src', PATH . '/lib');
|
||||||
|
|
||||||
require_once(PATH . '/lib/core/util/AutoloadBuilder.php');
|
require_once(PATH . '/lib/core/util/AutoloadBuilder.php');
|
||||||
|
|
||||||
|
@ -20,12 +20,9 @@ abstract class Action
|
|||||||
|
|
||||||
protected function extractParams()
|
protected function extractParams()
|
||||||
{
|
{
|
||||||
$params = FrontController::getInstance()->getRouter()->getRoute()->getParams();
|
foreach (Env::getParam() as $name => $value) {
|
||||||
if ($params) {
|
if (is_string($name)) {
|
||||||
foreach ($params as $name => $value) {
|
$this->$name = $value;
|
||||||
if (is_string($name)) {
|
|
||||||
$this->$name = $value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,7 @@ class ErrorAction extends ViewAction
|
|||||||
public function __construct($exception)
|
public function __construct($exception)
|
||||||
{
|
{
|
||||||
$this->exception = $exception;
|
$this->exception = $exception;
|
||||||
$this->view = FrontController::getInstance()->getView();
|
parent::__construct();
|
||||||
$this->execute();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function execute()
|
protected function execute()
|
||||||
|
@ -100,12 +100,18 @@ class FrontController
|
|||||||
$request = Env::getRequestUri();
|
$request = Env::getRequestUri();
|
||||||
$route = $this->getRouter()->route($request);
|
$route = $this->getRouter()->route($request);
|
||||||
if (!$route) {
|
if (!$route) {
|
||||||
throw new Error404Exception('Route "' . $request . '" not found');
|
throw new Error404Exception('Route for "' . $request . '" not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
$action_class = $route->getAction();
|
$action_class = $route->getAction();
|
||||||
|
if (!class_exists($action_class)) {
|
||||||
|
throw new GeneralException('Action class "' . $action_class . '" not found.');
|
||||||
|
}
|
||||||
$action = new $action_class();
|
$action = new $action_class();
|
||||||
$layout_class = $route->getLayout();
|
$layout_class = $route->getLayout();
|
||||||
|
if (!class_exists($layout_class)) {
|
||||||
|
throw new GeneralException('Layout class "' . $layout_class . '" not found.');
|
||||||
|
}
|
||||||
$layout = new $layout_class();
|
$layout = new $layout_class();
|
||||||
return $layout->fetch($action);
|
return $layout->fetch($action);
|
||||||
|
|
||||||
@ -113,7 +119,7 @@ class FrontController
|
|||||||
if (DEBUG == true) {
|
if (DEBUG == true) {
|
||||||
return ErrorHandler::showDebug($e);
|
return ErrorHandler::showDebug($e);
|
||||||
}
|
}
|
||||||
$layout = new DefaultLayout();
|
$layout = new ErrorLayout();
|
||||||
return $layout->fetch(new ErrorAction($e));
|
return $layout->fetch(new ErrorAction($e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ class Router
|
|||||||
|
|
||||||
public function add($name, $route, $action, $params = null, $layout = null)
|
public function add($name, $route, $action, $params = null, $layout = null)
|
||||||
{
|
{
|
||||||
if (! $layout) {
|
if (!$layout) {
|
||||||
$layout = $this->default_layout;
|
$layout = $this->default_layout;
|
||||||
}
|
}
|
||||||
$this->routes[$name] = new Route($route, $action, $params, $layout);
|
$this->routes[$name] = new Route($route, $action, $params, $layout);
|
||||||
@ -37,8 +37,9 @@ class Router
|
|||||||
|
|
||||||
foreach ($this->routes as $name => $route) {
|
foreach ($this->routes as $name => $route) {
|
||||||
if ($route->match($req)) {
|
if ($route->match($req)) {
|
||||||
$this->route_name = $route;
|
$this->route_name = $name;
|
||||||
$this->route = $route;
|
$this->route = $route;
|
||||||
|
Env::setParams($route->getParams());
|
||||||
return $this->route;
|
return $this->route;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,8 @@ class Env
|
|||||||
|
|
||||||
static protected $request = null;
|
static protected $request = null;
|
||||||
|
|
||||||
|
static protected $params = array();
|
||||||
|
|
||||||
static public function getRequestUri()
|
static public function getRequestUri()
|
||||||
{
|
{
|
||||||
if (self::$request === null) {
|
if (self::$request === null) {
|
||||||
@ -100,4 +102,23 @@ class Env
|
|||||||
$res = isset($_FILES[$name]) ? $_FILES[$name] : $default;
|
$res = isset($_FILES[$name]) ? $_FILES[$name] : $default;
|
||||||
return $param ? $res[$param] : $res;
|
return $param ? $res[$param] : $res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public function getParam($key = null, $default = false)
|
||||||
|
{
|
||||||
|
if ($key === null) {
|
||||||
|
return self::$params;
|
||||||
|
}
|
||||||
|
return (isset(self::$params[$key])) ? self::$params[$key] : $default;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function setParam($key, $value)
|
||||||
|
{
|
||||||
|
self::$params[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function setParams($params = array())
|
||||||
|
{
|
||||||
|
self::$params = self::$params + $params;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -19,6 +19,7 @@ class ErrorHandler
|
|||||||
|
|
||||||
static public function error_handler($errno, $errstr, $errfile, $errline )
|
static public function error_handler($errno, $errstr, $errfile, $errline )
|
||||||
{
|
{
|
||||||
|
ob_clean();
|
||||||
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
|
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -31,9 +32,9 @@ class ErrorHandler
|
|||||||
$i++;
|
$i++;
|
||||||
if($i >= $hiline - 10 && $i <= $hiline + 10) {
|
if($i >= $hiline - 10 && $i <= $hiline + 10) {
|
||||||
if ($i == $hiline) {
|
if ($i == $hiline) {
|
||||||
$code[] = '<tr class="error"><th>' . $i . '</th><td><span class="specific">' . $line . '</span></td></tr>';
|
$code[] = '<tr class="error"><th>' . $i . '</th><td><span class="specific">' . htmlentities($line, ENT_QUOTES, 'UTF-8') . '</span></td></tr>';
|
||||||
}else{
|
}else{
|
||||||
$code[] = '<tr><th>' . $i . '</th><td>' . $line . '</td></tr>';
|
$code[] = '<tr><th>' . $i . '</th><td>' . htmlentities($line, ENT_QUOTES, 'UTF-8') . '</td></tr>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($i > $hiline + 10) {
|
if($i > $hiline + 10) {
|
||||||
@ -50,6 +51,7 @@ class ErrorHandler
|
|||||||
}
|
}
|
||||||
$text = '<table class="req"><thead><tr><th>Variable</th><th>Value</th></tr></thead><tbody>';
|
$text = '<table class="req"><thead><tr><th>Variable</th><th>Value</th></tr></thead><tbody>';
|
||||||
foreach ($array as $key => $value) {
|
foreach ($array as $key => $value) {
|
||||||
|
$value = ($value) ? htmlentities($value, ENT_QUOTES, 'UTF-8') : ' ';
|
||||||
$text .= '<tr><td>' . $key . '</td><td class="code"><div>' . $value . '</div></td></tr>';
|
$text .= '<tr><td>' . $key . '</td><td class="code"><div>' . $value . '</div></td></tr>';
|
||||||
}
|
}
|
||||||
$text .= '</tbody></table>';
|
$text .= '</tbody></table>';
|
||||||
@ -139,7 +141,6 @@ class ErrorHandler
|
|||||||
<pre class="exception_value">{$exception->getMessage()}</pre>
|
<pre class="exception_value">{$exception->getMessage()}</pre>
|
||||||
<table class="meta">
|
<table class="meta">
|
||||||
<tbody>
|
<tbody>
|
||||||
<tbody>
|
|
||||||
<tr><th>Request Method:</th><td>{$method}</td></tr>
|
<tr><th>Request Method:</th><td>{$method}</td></tr>
|
||||||
<tr><th>Exception Type:</th><td>{$class}</td></tr>
|
<tr><th>Exception Type:</th><td>{$class}</td></tr>
|
||||||
<tr><th>Exception Message:</th><td><pre>{$exception->getMessage()}</pre></td></tr>
|
<tr><th>Exception Message:</th><td><pre>{$exception->getMessage()}</pre></td></tr>
|
||||||
|
15
layout/Error.layout.php
Normal file
15
layout/Error.layout.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright NetMonsters <team@netmonsters.ru>
|
||||||
|
* @link http://netmonsters.ru
|
||||||
|
* @package Majestic
|
||||||
|
* @subpackage Layout
|
||||||
|
* @since 2010-02-25
|
||||||
|
* @version SVN: $Id$
|
||||||
|
* @filesource $URL$
|
||||||
|
*/
|
||||||
|
|
||||||
|
class ErrorLayout extends Layout
|
||||||
|
{
|
||||||
|
protected function execute(){}
|
||||||
|
}
|
@ -20,7 +20,7 @@ class PHPView implements iView
|
|||||||
public function __construct($config)
|
public function __construct($config)
|
||||||
{
|
{
|
||||||
if (!isset($config['path'])) {
|
if (!isset($config['path'])) {
|
||||||
throw new Exception('Configuration must have a "host".');
|
throw new Exception('Configuration must have a "path".');
|
||||||
}
|
}
|
||||||
$this->setPath($config['path']);
|
$this->setPath($config['path']);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user