mirror of
https://github.com/getgrav/grav.git
synced 2026-03-04 03:21:33 +01:00
Added request processor
This commit is contained in:
@@ -23,6 +23,7 @@ use Grav\Common\Processors\LoggerProcessor;
|
||||
use Grav\Common\Processors\PagesProcessor;
|
||||
use Grav\Common\Processors\PluginsProcessor;
|
||||
use Grav\Common\Processors\RenderProcessor;
|
||||
use Grav\Common\Processors\RequestProcessor;
|
||||
use Grav\Common\Processors\SchedulerProcessor;
|
||||
use Grav\Common\Processors\SiteSetupProcessor;
|
||||
use Grav\Common\Processors\TasksProcessor;
|
||||
@@ -92,9 +93,10 @@ class Grav extends Container
|
||||
'initializeProcessor',
|
||||
'pluginsProcessor',
|
||||
'themesProcessor',
|
||||
'requestProcessor',
|
||||
'tasksProcessor',
|
||||
'backupsProcessor',
|
||||
'schedulerProcessor',
|
||||
'tasksProcessor',
|
||||
'assetsProcessor',
|
||||
'twigProcessor',
|
||||
'pagesProcessor',
|
||||
@@ -170,6 +172,9 @@ class Grav extends Container
|
||||
'schedulerProcessor' => function () {
|
||||
return new SchedulerProcessor($this);
|
||||
},
|
||||
'requestProcessor' => function () {
|
||||
return new RequestProcessor($this);
|
||||
},
|
||||
'tasksProcessor' => function () {
|
||||
return new TasksProcessor($this);
|
||||
},
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Grav.Common.Processors
|
||||
*
|
||||
* @copyright Copyright (C) 2015 - 2018 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Grav\Common\Processors\Events;
|
||||
|
||||
use Grav\Framework\RequestHandler\RequestHandler;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
use RocketTheme\Toolbox\Event\Event;
|
||||
|
||||
class RequestHandlerInitEvent extends Event
|
||||
{
|
||||
public function addMiddleware($name, MiddlewareInterface $middleware)
|
||||
{
|
||||
/** @var RequestHandler $handler */
|
||||
$handler = $this['handler'];
|
||||
$handler->addMiddleware($name, $middleware);
|
||||
}
|
||||
}
|
||||
37
system/src/Grav/Common/Processors/RequestProcessor.php
Normal file
37
system/src/Grav/Common/Processors/RequestProcessor.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package Grav.Common.Processors
|
||||
*
|
||||
* @copyright Copyright (C) 2015 - 2018 Trilby Media, LLC. All rights reserved.
|
||||
* @license MIT License; see LICENSE file for details.
|
||||
*/
|
||||
|
||||
namespace Grav\Common\Processors;
|
||||
|
||||
use Grav\Common\Uri;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
use RocketTheme\Toolbox\Event\Event;
|
||||
|
||||
class RequestProcessor extends ProcessorBase
|
||||
{
|
||||
public $id = 'request';
|
||||
public $title = 'Request';
|
||||
|
||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
|
||||
{
|
||||
$this->startTimer();
|
||||
$request = $request
|
||||
->withAttribute('grav', $this->container)
|
||||
->withAttribute('route', Uri::getCurrentRoute())
|
||||
->withAttribute('referrer', $this->container['uri']->referrer());
|
||||
|
||||
$event = new Event(['handler' => $handler]);
|
||||
$this->container->fireEvent('onRequestHandlerInit', $event);
|
||||
$this->stopTimer();
|
||||
|
||||
return $handler->handle($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Grav\Framework\RequestHandler\Middlewares;
|
||||
|
||||
use Grav\Framework\Psr7\Response;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
|
||||
class Exceptions implements MiddlewareInterface
|
||||
{
|
||||
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler) : ResponseInterface
|
||||
{
|
||||
try {
|
||||
return $handler->handle($request);
|
||||
} catch (\Throwable $exception) {
|
||||
$response = [
|
||||
'error' => [
|
||||
'type' => \get_class($exception),
|
||||
'code' => $exception->getCode(),
|
||||
'message' => $exception->getMessage(),
|
||||
'file' => $exception->getFile(),
|
||||
'line' => $exception->getLine(),
|
||||
'trace' => explode("\n", $exception->getTraceAsString()),
|
||||
]
|
||||
];
|
||||
|
||||
return new Response($exception->getCode() ?: 500, [], json_encode($response));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,9 +22,6 @@ class RequestHandler implements RequestHandlerInterface
|
||||
/** @var ContainerInterface */
|
||||
private $container;
|
||||
|
||||
/** @var callable */
|
||||
private $wrapper;
|
||||
|
||||
/**
|
||||
* Delegate constructor.
|
||||
*
|
||||
@@ -40,24 +37,31 @@ class RequestHandler implements RequestHandlerInterface
|
||||
}
|
||||
|
||||
/**
|
||||
* @param callable $wrapper
|
||||
* Add callable initializing Middleware that will be executed as soon as possible.
|
||||
*
|
||||
* @param $name
|
||||
* @param callable $callable
|
||||
* @return $this
|
||||
*/
|
||||
public function setWrapper(callable $wrapper)
|
||||
public function addCallable($name, callable $callable)
|
||||
{
|
||||
$this->wrapper = $wrapper;
|
||||
$this->container[$name] = $callable;
|
||||
array_unshift($this->middleware, $name);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Middleware that will be executed as soon as possible.
|
||||
*
|
||||
* @param $name
|
||||
* @param callable $callable
|
||||
* @return $this
|
||||
*/
|
||||
public function add($name, callable $callable)
|
||||
public function addMiddleware($name, MiddlewareInterface $middleware)
|
||||
{
|
||||
$this->container[$name] = $callable;
|
||||
$this->container[$name] = $middleware;
|
||||
array_unshift($this->middleware, $name);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user