Compare commits

...

13 Commits

Author SHA1 Message Date
Simon Sessingø c6341960d7 Merge pull request #341 from skipperbent/v3-development
Version 3.4.9.2
2017-12-17 09:53:39 +01:00
Simon Sessingo 72d33dd497 Compatibility: setUri can be both string and Uri object. 2017-12-17 09:51:56 +01:00
Simon Sessingo e23dd37435 Reverted changes 2017-12-16 23:29:00 +01:00
Simon Sessingo aa5ec47051 Removed key check in __get as it's already performed in the __isset method. 2017-12-16 23:24:31 +01:00
Simon Sessingø 85cf925793 Merge pull request #339 from skipperbent/v3-development
Version 3.4.9.1
2017-12-16 12:53:56 +01:00
Simon Sessingo 155729074b Fixed filtering on get-params in all method. 2017-12-16 12:48:10 +01:00
Simon Sessingø 7c0a20115e Merge pull request #336 from skipperbent/v3-development
Version 3.4.9.0
2017-12-09 23:58:33 +01:00
Simon Sessingø 0be7bfcfd9 Fixed utf-8 header issue (issue: #333) 2017-12-09 23:56:37 +01:00
Simon Sessingø 877e0aa937 Merge pull request #334 from skipperbent/v3-development
Version 3.4.8.0
2017-12-06 19:06:09 +01:00
Simon Sessingø 7f8d90eef8 Added $options and $debt param to json method in Response class. 2017-12-06 19:04:48 +01:00
Simon Sessingø 3e7767d978 Merge pull request #330 from skipperbent/v3-development
V3 development
2017-12-02 20:30:27 +01:00
Simon Sessingø 4bb784bcec Merge pull request #329 from skipperbent/v3-optimisations
Optimisations
2017-12-02 20:30:02 +01:00
Simon Sessingo c4ee1b9186 Optimisations 2017-12-02 19:30:30 +01:00
11 changed files with 73 additions and 49 deletions
+10 -10
View File
@@ -98,12 +98,12 @@ class Input
if (is_array($original['name'][$key]) === false) {
$file = InputFile::createFromArray([
'index' => (empty($key) === true && empty($originalIndex) === false) ? $originalIndex : $key,
'name' => $original['name'][$key],
'error' => $original['error'][$key],
'index' => (empty($key) === true && empty($originalIndex) === false) ? $originalIndex : $key,
'name' => $original['name'][$key],
'error' => $original['error'][$key],
'tmp_name' => $original['tmp_name'][$key],
'type' => $original['type'][$key],
'size' => $original['size'][$key],
'type' => $original['type'][$key],
'size' => $original['size'][$key],
]);
if (isset($output[$key]) === true) {
@@ -254,21 +254,21 @@ class Input
*/
public function all(array $filter = null)
{
$output = $_POST;
$output = $_GET;
if ($this->request->getMethod() === 'post') {
$contents = file_get_contents('php://input');
if (strpos(trim($contents), '{') === 0) {
$output = json_decode($contents, true);
if ($output === false) {
$output = [];
$post = json_decode($contents, true);
if ($post !== false) {
$output = array_merge($output, $post);
}
}
}
return ($filter !== null) ? array_intersect_key($output, array_flip($filter)) : array_merge($_GET, $output);
return ($filter !== null) ? array_intersect_key($output, array_flip($filter)) : $output;
}
}
@@ -52,6 +52,12 @@ class BaseCsrfVerifier implements IMiddleware
return false;
}
/**
* Handle request
*
* @param Request $request
* @throws TokenMismatchException
*/
public function handle(Request $request)
{
+6 -2
View File
@@ -196,10 +196,14 @@ class Request
}
/**
* @param Uri $uri
* @param Uri|string $uri
*/
public function setUri(Uri $uri)
public function setUri($uri)
{
if (is_string($uri) === true) {
$uri = new Uri($uri);
}
$this->uri = $uri;
}
+6 -4
View File
@@ -85,16 +85,18 @@ class Response
/**
* Json encode
* @param array|\JsonSerializable $value
* @throws \InvalidArgumentException;
* @param int $options JSON options Bitmask consisting of JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_NUMERIC_CHECK, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES, JSON_FORCE_OBJECT, JSON_PRESERVE_ZERO_FRACTION, JSON_UNESCAPED_UNICODE, JSON_PARTIAL_OUTPUT_ON_ERROR.
* @param int $dept JSON debt.
* @throws \InvalidArgumentException
*/
public function json($value)
public function json($value, $options = null, $dept = 512)
{
if (($value instanceof \JsonSerializable) === false && is_array($value) === false) {
throw new \InvalidArgumentException('Invalid type for parameter "value". Must be of type array or object implementing the \JsonSerializable interface.');
}
$this->header('Content-type: application/json');
echo json_encode($value);
$this->header('Content-Type: application/json; charset=utf-8');
echo json_encode($value, $options, $dept);
exit(0);
}
@@ -21,7 +21,7 @@ class CookieTokenProvider implements ITokenProvider
/**
* Generate random identifier for CSRF token
*
* @throws \RuntimeException
* @throws \RuntimeException|\Exception
* @return string
*/
public function generateToken()
+2 -6
View File
@@ -135,7 +135,7 @@ class Uri
public function parseUrl($url, $component = -1)
{
$encodedUrl = preg_replace_callback(
'%[^:/@?&=#]+%u',
'/[^:\/@?&=#]+/u',
function ($matches) {
return urlencode($matches[0]);
},
@@ -148,11 +148,7 @@ class Uri
throw new \InvalidArgumentException('Malformed URL: ' . $url);
}
foreach ((array)$parts as $name => $value) {
$parts[$name] = urldecode($value);
}
return $parts;
return array_map('urldecode', $parts);
}
/**
+14 -13
View File
@@ -30,22 +30,23 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
{
$max = count($this->getMiddlewares());
if ($max !== 0) {
if ($max === 0) {
return;
}
for ($i = 0; $i < $max; $i++) {
for ($i = 0; $i < $max; $i++) {
$middleware = $this->getMiddlewares()[$i];
$middleware = $this->getMiddlewares()[$i];
if (is_object($middleware) === false) {
$middleware = $this->loadClass($middleware);
}
if (($middleware instanceof IMiddleware) === false) {
throw new HttpException($middleware . ' must be inherit the IMiddleware interface');
}
$middleware->handle($request);
if (is_object($middleware) === false) {
$middleware = $this->loadClass($middleware);
}
if (($middleware instanceof IMiddleware) === false) {
throw new HttpException($middleware . ' must be inherit the IMiddleware interface');
}
$middleware->handle($request);
}
}
@@ -145,7 +146,7 @@ abstract class LoadableRoute extends Route implements ILoadableRoute
}
$url = '/' . ltrim($url, '/');
$url .= join('/', $unknownParams);
$url .= implode('/', $unknownParams);
return rtrim($url, '/') . '/';
}
+15 -2
View File
@@ -56,6 +56,12 @@ abstract class Route implements IRoute
protected $originalParameters = [];
protected $middlewares = [];
/**
* Load class by name
* @param string $name
* @return mixed
* @throws NotFoundHttpException
*/
protected function loadClass($name)
{
if (class_exists($name) === false) {
@@ -65,6 +71,13 @@ abstract class Route implements IRoute
return new $name();
}
/**
* Render route
*
* @param Request $request
* @return string|mixed
* @throws NotFoundHttpException
*/
public function renderRoute(Request $request)
{
$callback = $this->getCallback();
@@ -119,7 +132,7 @@ abstract class Route implements IRoute
if (preg_match_all('/' . $regex . '/u', $route, $parameters) > 0) {
$urlParts = preg_split('/((\-?\/?)\{[^}]+\})/', rtrim($route, '/'));
$urlParts = preg_split('/((\-?\/?)\{[^}]+\})/', $route);
foreach ($urlParts as $key => $t) {
@@ -149,7 +162,7 @@ abstract class Route implements IRoute
$urlParts[$key] = preg_quote($t, '/') . $regex;
}
$urlRegex = join('', $urlParts);
$urlRegex = implode('', $urlParts);
} else {
$urlRegex = preg_quote($route, '/');
@@ -81,7 +81,7 @@ class RouteController extends LoadableRoute implements IControllerRoute
$url .= '//' . $group->getDomains()[0];
}
$url .= '/' . trim($this->getUrl(), '/') . '/' . strtolower($method) . join('/', $parameters);
$url .= '/' . trim($this->getUrl(), '/') . '/' . strtolower($method) . implode('/', $parameters);
return '/' . trim($url, '/') . '/';
}
+11 -8
View File
@@ -125,7 +125,6 @@ class Router
$url = ($this->request->getRewriteUrl() !== null) ? $this->request->getRewriteUrl() : $this->request->getUri()->getPath();
/* @var $route IRoute */
for ($i = $max; $i >= 0; $i--) {
$route = $routes[$i];
@@ -218,6 +217,14 @@ class Router
$this->processRoutes($this->routes);
}
/**
* Routes the request
*
* @param bool $rewrite
* @return string|mixed
* @throws HttpException
* @throws \Exception
*/
public function routeRequest($rewrite = false)
{
$routeNotAllowed = false;
@@ -315,12 +322,8 @@ class Router
{
$url = ($this->request->getRewriteUrl() !== null) ? $this->request->getRewriteUrl() : $this->request->getUri()->getPath();
$max = count($this->exceptionHandlers);
/* @var $handler IExceptionHandler */
for ($i = 0; $i < $max; $i++) {
$handler = $this->exceptionHandlers[$i];
foreach ($this->exceptionHandlers as $key => $handler) {
if (is_object($handler) === false) {
$handler = new $handler();
@@ -346,7 +349,7 @@ class Router
/* If the request has changed */
if ($rewriteUrl !== null && $rewriteUrl !== $url) {
unset($this->exceptionHandlers[$i]);
unset($this->exceptionHandlers[$key]);
$this->exceptionHandlers = array_values($this->exceptionHandlers);
return $this->routeRequest(true);
@@ -510,7 +513,7 @@ class Router
}
/* No result so we assume that someone is using a hardcoded url and join everything together. */
$url = trim(join('/', array_merge((array)$name, (array)$parameters)), '/');
$url = trim(implode('/', array_merge((array)$name, (array)$parameters)), '/');
return (($url === '') ? '/' : '/' . $url . '/') . $this->arrayToParams($getParams);
}
+1 -2
View File
@@ -45,8 +45,7 @@ class SimpleRouter
/**
* Start/route request
*
* @throws HttpException
* @throws NotFoundHttpException
* @throws HttpException|NotFoundHttpException|\Exception
*/
public static function start()
{