mirror of
https://github.com/skipperbent/simple-php-router.git
synced 2026-07-11 16:02:16 +00:00
Updates
- Simplified exception-handling (see demo project for examples). - Optimised sample-project. - Optimised and added further unit-tests. - Optimised and bugfixes.
This commit is contained in:
@@ -22,4 +22,8 @@ class DefaultController {
|
||||
|
||||
}
|
||||
|
||||
public function notFound() {
|
||||
echo 'Page not found';
|
||||
}
|
||||
|
||||
}
|
||||
@@ -21,8 +21,14 @@ class CustomExceptionHandler implements IExceptionHandler {
|
||||
|
||||
// else we just throw the error
|
||||
if($error->getCode() == 404) {
|
||||
die(sprintf('An error occurred (%s):<br/>%s', $error->getCode(), $error->getMessage()));
|
||||
|
||||
// Return 404 path
|
||||
$request->setUri('/404');
|
||||
return $request;
|
||||
|
||||
}
|
||||
|
||||
throw $error;
|
||||
}
|
||||
|
||||
}
|
||||
+10
-39
@@ -8,14 +8,12 @@
|
||||
namespace Demo;
|
||||
|
||||
use Pecee\Exception\RouterException;
|
||||
use Pecee\Handler\IExceptionHandler;
|
||||
use Pecee\Http\Middleware\IMiddleware;
|
||||
use Pecee\SimpleRouter\RouterBase;
|
||||
use Pecee\SimpleRouter\SimpleRouter;
|
||||
|
||||
class Router extends SimpleRouter {
|
||||
|
||||
protected static $defaultExceptionHandler;
|
||||
protected static $defaultMiddlewares = array();
|
||||
|
||||
public static function start($defaultNamespace = null) {
|
||||
@@ -23,50 +21,23 @@ class Router extends SimpleRouter {
|
||||
// change this to whatever makes sense in your project
|
||||
require_once 'routes.php';
|
||||
|
||||
// Handle exceptions
|
||||
try {
|
||||
|
||||
if(count(static::$defaultMiddlewares)) {
|
||||
/* @var $middleware \Pecee\Http\Middleware\IMiddleware */
|
||||
foreach(static::$defaultMiddlewares as $middleware) {
|
||||
$middleware = new $middleware();
|
||||
if(!($middleware instanceof IMiddleware)) {
|
||||
throw new RouterException('Middleware must be implement the IMiddleware interface.');
|
||||
}
|
||||
$middleware->handle(RouterBase::getInstance()->getRequest());
|
||||
if(count(static::$defaultMiddlewares)) {
|
||||
/* @var $middleware \Pecee\Http\Middleware\IMiddleware */
|
||||
foreach(static::$defaultMiddlewares as $middleware) {
|
||||
$middleware = new $middleware();
|
||||
if(!($middleware instanceof IMiddleware)) {
|
||||
throw new RouterException('Middleware must be implement the IMiddleware interface.');
|
||||
}
|
||||
$middleware->handle(RouterBase::getInstance()->getRequest());
|
||||
}
|
||||
|
||||
// Set default namespace
|
||||
$defaultNamespace = '\\Demo\\Controllers';
|
||||
|
||||
parent::start($defaultNamespace);
|
||||
} catch(\Exception $e) {
|
||||
|
||||
$route = RouterBase::getInstance()->getLoadedRoute();
|
||||
|
||||
// Otherwise use the fallback default exceptions handler
|
||||
if(static::$defaultExceptionHandler !== null) {
|
||||
static::loadExceptionHandler(static::$defaultExceptionHandler, $route, $e);
|
||||
}
|
||||
|
||||
throw $e;
|
||||
}
|
||||
|
||||
}
|
||||
// Set default namespace
|
||||
$defaultNamespace = '\\Demo\\Controllers';
|
||||
|
||||
protected static function loadExceptionHandler($class, $route, $e) {
|
||||
$class = new $class();
|
||||
parent::start($defaultNamespace);
|
||||
|
||||
if(!($class instanceof IExceptionHandler)) {
|
||||
throw new \ErrorException('Exception handler must be an instance of \Pecee\Handler\IExceptionHandler');
|
||||
}
|
||||
|
||||
$class->handleError(RouterBase::getInstance()->getRequest(), $route, $e);
|
||||
}
|
||||
|
||||
public static function defaultExceptionHandler($handler) {
|
||||
static::$defaultExceptionHandler = $handler;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -6,14 +6,18 @@
|
||||
use Demo\Router;
|
||||
|
||||
Router::csrfVerifier(new \Demo\Middlewares\CsrfVerifier());
|
||||
Router::defaultExceptionHandler('\Demo\Handlers\CustomExceptionHandler');
|
||||
|
||||
Router::get('/', 'DefaultController@index')->setAlias('home');
|
||||
Router::get('/contact', 'DefaultController@contact')->setAlias('contact');
|
||||
Router::basic('/companies', 'DefaultController@companies')->setAlias('companies');
|
||||
Router::basic('/companies/{id}', 'DefaultController@companies')->setAlias('companies');
|
||||
Router::group(['exceptionHandler' => 'Demo\Handlers\CustomExceptionHandler'], function() {
|
||||
|
||||
Router::get('/', 'DefaultController@index')->setAlias('home');
|
||||
Router::get('/contact', 'DefaultController@contact')->setAlias('contact');
|
||||
Router::get('/404', 'DefaultController@notFound')->setAlias('404');
|
||||
Router::basic('/companies', 'DefaultController@companies')->setAlias('companies');
|
||||
Router::basic('/companies/{id}', 'DefaultController@companies')->setAlias('companies');
|
||||
|
||||
// Api
|
||||
Router::group(['prefix' => '/api', 'middleware' => 'Demo\Middlewares\ApiVerification'], function() {
|
||||
Router::resource('/demo', 'ApiController');
|
||||
});
|
||||
|
||||
// Api
|
||||
Router::group(['prefix' => '/api', 'middleware' => 'Demo\Middlewares\ApiVerification'], function() {
|
||||
Router::resource('/demo', 'ApiController');
|
||||
});
|
||||
Reference in New Issue
Block a user