Refactor request handler
This commit is contained in:
parent
5e7edec23c
commit
4cb2085987
|
|
@ -62,16 +62,10 @@ final class JsonApi implements RequestHandlerInterface
|
||||||
|
|
||||||
switch (count($segments)) {
|
switch (count($segments)) {
|
||||||
case 1:
|
case 1:
|
||||||
return $this->handleWithHandler(
|
return $this->handleCollection($request, $segments);
|
||||||
$request,
|
|
||||||
$this->getCollectionHandler($request, $segments)
|
|
||||||
);
|
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
return $this->handleWithHandler(
|
return $this->handleResource($request, $segments);
|
||||||
$request,
|
|
||||||
$this->getMemberHandler($request, $segments)
|
|
||||||
);
|
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
// return $this->handleRelated($request, $resource, $model, $segments[2]);
|
// return $this->handleRelated($request, $resource, $model, $segments[2]);
|
||||||
|
|
@ -136,49 +130,42 @@ final class JsonApi implements RequestHandlerInterface
|
||||||
return $path;
|
return $path;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getCollectionHandler(Request $request, array $segments): RequestHandlerInterface
|
private function handleCollection(Request $request, array $segments): Response
|
||||||
{
|
{
|
||||||
$resource = $this->getResource($segments[0]);
|
$resource = $this->getResource($segments[0]);
|
||||||
|
|
||||||
switch ($request->getMethod()) {
|
switch ($request->getMethod()) {
|
||||||
case 'GET':
|
case 'GET':
|
||||||
return new Handler\Index($this, $resource);
|
return (new Handler\Index($this, $resource))->handle($request);
|
||||||
|
|
||||||
case 'POST':
|
case 'POST':
|
||||||
return new Handler\Create($this, $resource);
|
return (new Handler\Create($this, $resource))->handle($request);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new MethodNotAllowedException;
|
throw new MethodNotAllowedException;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getMemberHandler(Request $request, array $segments): RequestHandlerInterface
|
private function handleResource(Request $request, array $segments): Response
|
||||||
{
|
{
|
||||||
$resource = $this->getResource($segments[0]);
|
$resource = $this->getResource($segments[0]);
|
||||||
$model = $this->findResource($request, $resource, $segments[1]);
|
$model = $this->findResource($request, $resource, $segments[1]);
|
||||||
|
|
||||||
switch ($request->getMethod()) {
|
switch ($request->getMethod()) {
|
||||||
case 'PATCH':
|
case 'PATCH':
|
||||||
return new Handler\Update($this, $resource, $model);
|
return (new Handler\Update($this, $resource, $model))->handle($request);
|
||||||
|
|
||||||
case 'GET':
|
case 'GET':
|
||||||
return new Handler\Show($this, $resource, $model);
|
return (new Handler\Show($this, $resource, $model))->handle($request);
|
||||||
|
|
||||||
case 'DELETE':
|
case 'DELETE':
|
||||||
return new Handler\Delete($resource, $model);
|
return (new Handler\Delete($resource, $model))->handle($request);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
throw new MethodNotAllowedException;
|
throw new MethodNotAllowedException;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleWithHandler(Request $request, RequestHandlerInterface $handler)
|
|
||||||
{
|
|
||||||
$request = $request->withAttribute('jsonApiHandler', $handler);
|
|
||||||
|
|
||||||
return $handler->handle($request);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function error($e)
|
public function error($e)
|
||||||
{
|
{
|
||||||
if (! $e instanceof ErrorProviderInterface) {
|
if (! $e instanceof ErrorProviderInterface) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue