Passed
Push — master ( 4b696e...cdbf03 )
by Aimeos
03:28
created

JsonapiController::createRequest()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 3
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 6
rs 10
1
<?php
2
3
/**
4
 * @license MIT, http://opensource.org/licenses/MIT
5
 * @copyright Aimeos (aimeos.org), 2017
6
 * @package symfony
7
 * @subpackage Controller
8
 */
9
10
11
namespace Aimeos\ShopBundle\Controller;
12
13
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
14
use Symfony\Bridge\PsrHttpMessage\Factory\HttpFoundationFactory;
15
use Symfony\Bridge\PsrHttpMessage\Factory\PsrHttpFactory;
16
use Symfony\Component\HttpFoundation\Response;
17
use Symfony\Component\HttpFoundation\Request;
18
use Psr\Http\Message\ServerRequestInterface;
19
use Nyholm\Psr7\Factory\Psr17Factory;
20
21
22
/**
23
 * Aimeos controller for the JSON client REST API
24
 *
25
 * @package symfony
26
 * @subpackage Controller
27
 */
28
class JsonapiController extends AbstractController
29
{
30
	/**
31
	 * Deletes the resource object or a list of resource objects
32
	 *
33
	 * @param Request $request Request object
34
	 * @param string Resource location, e.g. "customer"
35
	 * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
36
	 */
37
	public function deleteAction( Request $request, string $resource ) : Response
38
	{
39
		$req = $this->createRequest( $request );
40
		$res = ( new Psr17Factory )->createResponse();
41
42
		return $this->createResponse( $this->createClient( $req, $resource )->delete( $req, $res ) );
43
	}
44
45
46
	/**
47
	 * Returns the requested resource object or list of resource objects
48
	 *
49
	 * @param Request $request Request object
50
	 * @param string Resource location, e.g. "customer"
51
	 * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
52
	 */
53
	public function getAction( Request $request, ?string $resource ) : Response
54
	{
55
		$req = $this->createRequest( $request );
56
		$res = ( new Psr17Factory )->createResponse();
57
58
		return $this->createResponse( $this->createClient( $req, $resource )->get( $req, $res ) );
59
	}
60
61
62
	/**
63
	 * Updates a resource object or a list of resource objects
64
	 *
65
	 * @param Request $request Request object
66
	 * @param string Resource location, e.g. "customer"
67
	 * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
68
	 */
69
	public function patchAction( Request $request, ?string $resource ) : Response
70
	{
71
		$req = $this->createRequest( $request );
72
		$res = ( new Psr17Factory )->createResponse();
73
74
		return $this->createResponse( $this->createClient( $req, $resource )->patch( $req, $res ) );
75
	}
76
77
78
	/**
79
	 * Creates a new resource object or a list of resource objects
80
	 *
81
	 * @param Request $request Request object
82
	 * @param string Resource location, e.g. "customer"
83
	 * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
84
	 */
85
	public function postAction( Request $request, ?string $resource ) : Response
86
	{
87
		$req = $this->createRequest( $request );
88
		$res = ( new Psr17Factory )->createResponse();
89
90
		return $this->createResponse( $this->createClient( $req, $resource )->post( $req, $res ) );
91
	}
92
93
94
	/**
95
	 * Creates or updates a single resource object
96
	 *
97
	 * @param Request $request Request object
98
	 * @param string Resource location, e.g. "customer"
99
	 * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
100
	 */
101
	public function putAction( Request $request, ?string $resource ) : Response
102
	{
103
		$req = $this->createRequest( $request );
104
		$res = ( new Psr17Factory )->createResponse();
105
106
		return $this->createResponse( $this->createClient( $req, $resource )->put( $req, $res ) );
107
	}
108
109
110
	/**
111
	 * Returns the available HTTP verbs and the resource URLs
112
	 *
113
	 * @param Request $request Request object
114
	 * @param string Resource location, e.g. "customer"
115
	 * @return \Psr\Http\Message\ResponseInterface Response object containing the generated output
116
	 */
117
	public function optionsAction( Request $request, ?string $resource = '' ) : Response
118
	{
119
		$req = $this->createRequest( $request );
120
		$res = ( new Psr17Factory )->createResponse();
121
122
		return $this->createResponse( $this->createClient( $req, $resource )->options( $req, $res ) );
123
	}
124
125
126
	/**
127
	 * Returns the resource controller
128
	 *
129
	 * @param \Psr\Http\Message\ServerRequestInterface $request Request object
130
	 * @param string Resource location, e.g. "customer"
131
	 * @return \Aimeos\Client\JsonApi\Iface JSON API client
132
	 */
133
	protected function createClient( ServerRequestInterface $request, ?string $resource ) : \Aimeos\Client\JsonApi\Iface
134
	{
135
		$args = $request->getAttributes();
136
		$params = $request->getQueryParams();
137
		$related = ( isset( $args['related'] ) ? $args['related'] : ( isset( $params['related'] ) ? $params['related'] : null ) );
138
139
		$tmplPaths = $this->container->get( 'aimeos' )->get()->getTemplatePaths( 'client/jsonapi/templates' );
140
		$context = $this->container->get( 'aimeos.context' )->get();
141
		$langid = $context->locale()->getLanguageId();
142
143
		$view = $this->container->get( 'aimeos.view' )->create( $context, $tmplPaths, $langid );
144
		$context->setView( $view );
145
146
		return \Aimeos\Client\JsonApi::create( $context, $resource . '/' . $related );
147
	}
148
149
150
	protected function createRequest( Request $reqest ) : \Psr\Http\Message\RequestInterface
151
	{
152
		$psr17Factory = new Psr17Factory();
153
		$psrHttpFactory = new PsrHttpFactory( $psr17Factory, $psr17Factory, $psr17Factory, $psr17Factory );
154
155
		return $psrHttpFactory->createRequest( $reqest );
156
	}
157
158
159
	protected function createResponse( \Psr\Http\Message\ResponseInterface $response ) : Response
160
	{
161
		$httpFoundationFactory = new HttpFoundationFactory();
162
		return $httpFoundationFactory->createResponse( $response );
163
	}
164
}
165