Extract another middleware from API routing

This commit is contained in:
Franz Liedke 2015-05-27 01:48:04 +02:00
parent 26c9c17a1b
commit a773970956
2 changed files with 27 additions and 9 deletions

View File

@ -0,0 +1,24 @@
<?php namespace Flarum\Api\Middleware;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Zend\Stratigility\MiddlewareInterface;
class ReadJsonParameters implements MiddlewareInterface
{
/**
* {@inheritdoc}
*/
public function __invoke(Request $request, Response $response, callable $out = null)
{
if (str_contains($request->getHeaderLine('content-type'), 'application/vnd.api+json')) {
$input = json_decode($request->getBody(), true);
foreach ($input as $name => $value) {
$request = $request->withAttribute($name, $value);
}
}
return $out ? $out($request, $response) : $response;
}
}

View File

@ -1,6 +1,6 @@
<?php <?php
use Flarum\Api\Request as ApiRequest; use Flarum\Api\Request;
use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ServerRequestInterface;
$action = function ($class) { $action = function ($class) {
@ -8,14 +8,8 @@ $action = function ($class) {
$action = $this->app->make($class); $action = $this->app->make($class);
$actor = $this->app->make('Flarum\Support\Actor'); $actor = $this->app->make('Flarum\Support\Actor');
if (str_contains($httpRequest->getHeaderLine('content-type'), 'application/vnd.api+json')) { $input = array_merge($httpRequest->getAttributes(), $routeParams);
$input = json_decode($httpRequest->getBody(), true); $request = new Request($input, $actor, $httpRequest);
} else {
$input = $httpRequest->getAttributes();
}
$input = array_merge($input, $routeParams);
$request = new ApiRequest($input, $actor, $httpRequest);
return $action->handle($request); return $action->handle($request);
}; };