* uplift to latest expressive

This commit is contained in:
Danyi Dávid
2017-11-06 13:18:39 +01:00
parent b5c307166e
commit 8c5b58acd1
44 changed files with 3419 additions and 1022 deletions

View File

@@ -2,16 +2,17 @@
namespace App\Action;
use Psr\Http\Message\ResponseInterface;
use Interop\Http\ServerMiddleware\DelegateInterface;
use Interop\Http\ServerMiddleware\MiddlewareInterface as ServerMiddlewareInterface;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response\JsonResponse;
use Zend\Stratigility\MiddlewareInterface;
use Zend\Json\Json;
abstract class AbstractAction implements MiddlewareInterface
abstract class AbstractAction implements ServerMiddlewareInterface
{
const IDENTIFIER_NAME = 'id';
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function process(ServerRequestInterface $request, DelegateInterface $delegate)
{
$requestMethod = strtoupper($request->getMethod());
$id = $request->getAttribute(static::IDENTIFIER_NAME);
@@ -19,68 +20,68 @@ abstract class AbstractAction implements MiddlewareInterface
switch ($requestMethod) {
case 'GET':
return isset($id)
? $this->get($request, $response, $next)
: $this->getList($request, $response, $next);
? $this->get($request, $delegate)
: $this->getList($request, $delegate);
case 'POST':
return $this->create($request, $response, $next);
return $this->create($request, $delegate);
case 'PUT':
return $this->update($request, $response, $next);
return $this->update($request, $delegate);
case 'DELETE':
return isset($id)
? $this->delete($request, $response, $next)
: $this->deleteList($request, $response, $next);
? $this->delete($request, $delegate)
: $this->deleteList($request, $delegate);
case 'HEAD':
return $this->head($request, $response, $next);
return $this->head($request, $delegate);
case 'OPTIONS':
return $this->options($request, $response, $next);
return $this->options($request, $delegate);
case 'PATCH':
return $this->patch($request, $response, $next);
return $this->patch($request, $delegate);
default:
return $next($request, $response);
return $delegate->process($request);
}
}
public function get(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function get(ServerRequestInterface $request, DelegateInterface $delegate)
{
return $this->createResponse(['content' => 'Method not allowed'], 405);
}
public function getList(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function getList(ServerRequestInterface $request, DelegateInterface $delegate)
{
return $this->createResponse(['content' => 'Method not allowed'], 405);
}
public function create(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function create(ServerRequestInterface $request, DelegateInterface $delegate)
{
return $this->createResponse(['content' => 'Method not allowed'], 405);
}
public function update(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function update(ServerRequestInterface $request, DelegateInterface $delegate)
{
return $this->createResponse(['content' => 'Method not allowed'], 405);
}
public function delete(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function delete(ServerRequestInterface $request, DelegateInterface $delegate)
{
return $this->createResponse(['content' => 'Method not allowed'], 405);
}
public function deleteList(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function deleteList(ServerRequestInterface $request, DelegateInterface $delegate)
{
return $this->createResponse(['content' => 'Method not allowed'], 405);
}
public function head(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function head(ServerRequestInterface $request, DelegateInterface $delegate)
{
return $this->createResponse(['content' => 'Method not allowed'], 405);
}
public function options(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function options(ServerRequestInterface $request, DelegateInterface $delegate)
{
return $this->createResponse(['content' => 'Method not allowed'], 405);
}
public function patch(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function patch(ServerRequestInterface $request, DelegateInterface $delegate)
{
return $this->createResponse(['content' => 'Method not allowed'], 405);
}
@@ -89,4 +90,69 @@ abstract class AbstractAction implements MiddlewareInterface
{
return new JsonResponse($data, $status);
}
/**
*
* @param ServerRequestInterface $request
* @return array|object
*/
public function getRequestData(ServerRequestInterface $request)
{
$body = $request->getParsedBody();
if (!empty($body)) {
return $body;
}
return $this->parseRequestData(
$request->getBody()->getContents(),
$request->getHeaderLine('content-type')
);
}
/**
*
* @param string $input
* @param string $contentType
* @return mixed
*/
private function parseRequestData($input, $contentType)
{
$contentTypeParts = preg_split('/\s*[;,]\s*/', $contentType);
$parser = $this->returnParserContentType($contentTypeParts[0]);
return $parser($input);
}
/**
*
* @param string $contentType
* @return callable
*/
private function returnParserContentType(string $contentType)
{
if ($contentType === 'application/x-www-form-urlencoded') {
return function ($input) {
parse_str($input, $data);
return $data;
};
} elseif ($contentType === 'application/json') {
return function ($input) {
$jsonDecoder = new Json();
try {
return $jsonDecoder->decode($input, Json::TYPE_ARRAY);
} catch (\Exception $e) {
return false;
}
};
} elseif ($contentType === 'multipart/form-data') {
return function ($input) {
return $input;
};
}
return function ($input) {
return $input;
};
}
}

View File

@@ -2,33 +2,34 @@
namespace App\Action;
use App\Service\SkiesService;
use Psr\Http\Message\ResponseInterface;
use App\Service\SkiesClientService;
use Interop\Http\ServerMiddleware\DelegateInterface;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response\JsonResponse;
use Zend\Diactoros\Response\TextResponse;
class ActivityAction extends AbstractAction
{
private $skiesService;
/**
* @var SkiesClientService
*/
private $skiesClient;
public function __construct(SkiesService $skiesService)
public function __construct(SkiesClientService $skiesClient)
{
$this->skiesService = $skiesService;
$this->skiesClient = $skiesClient;
}
public function getList(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function getList(ServerRequestInterface $request, DelegateInterface $delegate)
{
return new JsonResponse($this->skiesService->getActivityList());
$authHeader = $request->getHeaderLine("x-passthru-auth");
return new JsonResponse($this->skiesClient->setAuthHeader($authHeader)->getActivities());
}
public function get(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function get(ServerRequestInterface $request, DelegateInterface $delegate)
{
$id = $request->getAttribute(self::IDENTIFIER_NAME);
return new JsonResponse($this->skiesService->getActivity($id));
}
public function options(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
{
return new JsonResponse(true);
$authHeader = $request->getHeaderLine("x-passthru-auth");
return new JsonResponse($this->skiesClient->setAuthHeader($authHeader)->getActivity($id));
}
}

View File

@@ -2,14 +2,14 @@
namespace App\Action;
use App\Service\SkiesService;
use App\Service\SkiesClientService;
use Interop\Container\ContainerInterface;
class ActivityFactory
{
public function __invoke(ContainerInterface $container)
{
$skiesService = $container->get(SkiesService::class);
return new ActivityAction($skiesService);
$skiesClient = $container->get(SkiesClientService::class);
return new ActivityAction($skiesClient);
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Action;
use App\Service\SkiesClientService;
use Interop\Http\ServerMiddleware\DelegateInterface;
use Interop\Http\ServerMiddleware\MiddlewareInterface as ServerMiddlewareInterface;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response\JsonResponse;
class ActivitySignoffAction implements ServerMiddlewareInterface
{
/**
* @var SkiesClientService
*/
private $skiesClient;
public function __construct(SkiesClientService $skiesClient)
{
$this->skiesClient = $skiesClient;
}
public function process(ServerRequestInterface $request, DelegateInterface $delegate)
{
$authHeader = $request->getHeaderLine("x-passthru-auth");
$id = $request->getAttribute("id");
return new JsonResponse($this->skiesClient->setAuthHeader($authHeader)->signOffActivity($id));
}
}

View File

@@ -0,0 +1,15 @@
<?php
namespace App\Action;
use App\Service\SkiesClientService;
use Interop\Container\ContainerInterface;
class ActivitySignoffFactory
{
public function __invoke(ContainerInterface $container)
{
$skiesClient = $container->get(SkiesClientService::class);
return new ActivitySignoffAction($skiesClient);
}
}

View File

@@ -0,0 +1,29 @@
<?php
namespace App\Action;
use App\Service\SkiesClientService;
use Interop\Http\ServerMiddleware\DelegateInterface;
use Interop\Http\ServerMiddleware\MiddlewareInterface as ServerMiddlewareInterface;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response\JsonResponse;
class ActivitySignupAction implements ServerMiddlewareInterface
{
/**
* @var SkiesClientService
*/
private $skiesClient;
public function __construct(SkiesClientService $skiesClient)
{
$this->skiesClient = $skiesClient;
}
public function process(ServerRequestInterface $request, DelegateInterface $delegate)
{
$authHeader = $request->getHeaderLine("x-passthru-auth");
$id = $request->getAttribute("id");
return new JsonResponse($this->skiesClient->setAuthHeader($authHeader)->signUpActivity($id));
}
}

View File

@@ -0,0 +1,15 @@
<?php
namespace App\Action;
use App\Service\SkiesClientService;
use Interop\Container\ContainerInterface;
class ActivitySignupFactory
{
public function __invoke(ContainerInterface $container)
{
$skiesClient = $container->get(SkiesClientService::class);
return new ActivitySignupAction($skiesClient);
}
}

View File

@@ -2,7 +2,8 @@
namespace App\Action;
use Psr\Http\Message\ResponseInterface;
use Interop\Http\ServerMiddleware\DelegateInterface;
use Interop\Http\ServerMiddleware\MiddlewareInterface as ServerMiddlewareInterface;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response\HtmlResponse;
use Zend\Diactoros\Response\JsonResponse;
@@ -12,7 +13,7 @@ use Zend\Expressive\Plates\PlatesRenderer;
use Zend\Expressive\Twig\TwigRenderer;
use Zend\Expressive\ZendView\ZendViewRenderer;
class HomePageAction
class HomePageAction implements ServerMiddlewareInterface
{
private $router;
@@ -24,8 +25,15 @@ class HomePageAction
$this->template = $template;
}
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function process(ServerRequestInterface $request, DelegateInterface $delegate)
{
if (! $this->template) {
return new JsonResponse([
'welcome' => 'Congratulations! You have installed the zend-expressive skeleton application.',
'docsUrl' => 'https://docs.zendframework.com/zend-expressive/',
]);
}
$data = [];
if ($this->router instanceof Router\AuraRouter) {
@@ -36,7 +44,7 @@ class HomePageAction
$data['routerDocs'] = 'https://github.com/nikic/FastRoute';
} elseif ($this->router instanceof Router\ZendRouter) {
$data['routerName'] = 'Zend Router';
$data['routerDocs'] = 'http://framework.zend.com/manual/current/en/modules/zend.mvc.routing.html';
$data['routerDocs'] = 'https://docs.zendframework.com/zend-router/';
}
if ($this->template instanceof PlatesRenderer) {
@@ -47,14 +55,7 @@ class HomePageAction
$data['templateDocs'] = 'http://twig.sensiolabs.org/documentation';
} elseif ($this->template instanceof ZendViewRenderer) {
$data['templateName'] = 'Zend View';
$data['templateDocs'] = 'http://framework.zend.com/manual/current/en/modules/zend.view.quick-start.html';
}
if (!$this->template) {
return new JsonResponse([
'welcome' => 'Congratulations! You have installed the zend-expressive skeleton application.',
'docsUrl' => 'zend-expressive.readthedocs.org',
]);
$data['templateDocs'] = 'https://docs.zendframework.com/zend-view/';
}
return new HtmlResponse($this->template->render('app::home-page', $data));

View File

@@ -11,7 +11,7 @@ class HomePageFactory
public function __invoke(ContainerInterface $container)
{
$router = $container->get(RouterInterface::class);
$template = ($container->has(TemplateRendererInterface::class))
$template = $container->has(TemplateRendererInterface::class)
? $container->get(TemplateRendererInterface::class)
: null;

View File

@@ -0,0 +1,18 @@
<?php
namespace App\Action;
use App\Service\SkiesClientService;
class NewsAction
{
/**
* @var SkiesClientService
*/
private $skiesClient;
public function __construct(SkiesClientService $skiesClient)
{
$this->skiesClient = $skiesClient;
}
}

View File

@@ -0,0 +1,15 @@
<?php
namespace App\Action;
use App\Service\SkiesClientService;
use Interop\Container\ContainerInterface;
class NewsFactory
{
public function __invoke(ContainerInterface $container)
{
$skiesClient = $container->get(SkiesClientService::class);
return new NewsAction($skiesClient);
}
}

View File

@@ -2,16 +2,15 @@
namespace App\Action;
use Interop\Http\ServerMiddleware\DelegateInterface;
use Interop\Http\ServerMiddleware\MiddlewareInterface as ServerMiddlewareInterface;
use Zend\Diactoros\Response\JsonResponse;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class PingAction
class PingAction implements ServerMiddlewareInterface
{
public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next = null)
public function process(ServerRequestInterface $request, DelegateInterface $delegate)
{
return new JsonResponse([
'ack' => time(),
]);
return new JsonResponse(['ack' => time()]);
}
}