Completed
Pull Request — master (#52)
by John
02:47
created

RequestListener::onKernelRequest()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 20
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 4
Bugs 0 Features 0
Metric Value
c 4
b 0
f 0
dl 0
loc 20
rs 9.2
cc 4
eloc 13
nc 4
nop 1
1
<?php
2
/*
3
 * This file is part of the KleijnWeb\SwaggerBundle package.
4
 *
5
 * For the full copyright and license information, please view the LICENSE
6
 * file that was distributed with this source code.
7
 */
8
9
namespace KleijnWeb\SwaggerBundle\EventListener;
10
11
use KleijnWeb\SwaggerBundle\Document\DocumentRepository;
12
use KleijnWeb\SwaggerBundle\Request\RequestProcessor;
13
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
14
15
/**
16
 * @author John Kleijn <[email protected]>
17
 */
18
class RequestListener
19
{
20
    /**
21
     * @var DocumentRepository
22
     */
23
    private $documentRepository;
24
25
    /**
26
     * @var RequestProcessor
27
     */
28
    private $processor;
29
30
    /**
31
     * @param DocumentRepository $schemaRepository
32
     * @param RequestProcessor   $processor
33
     */
34
    public function __construct(DocumentRepository $schemaRepository, RequestProcessor $processor)
35
    {
36
        $this->documentRepository = $schemaRepository;
37
        $this->processor = $processor;
38
    }
39
40
    /**
41
     * @param GetResponseEvent $event
42
     */
43
    public function onKernelRequest(GetResponseEvent $event)
44
    {
45
        if (!$event->isMasterRequest()) {
46
            return;
47
        }
48
        $request = $event->getRequest();
49
        if (!$request->get('_definition')) {
50
            return;
51
        }
52
        if (!$request->get('_swagger_path')) {
53
            throw new \LogicException("Request does not contain reference to Swagger path");
54
        }
55
        $swaggerDocument = $this->documentRepository->get($request->get('_definition'));
56
        $request->attributes->set('_swagger_document', $swaggerDocument);
57
58
        $operation = $swaggerDocument->getOperationObject($request->get('_swagger_path'), $request->getMethod());
59
        $request->attributes->set('_swagger_operation', $operation);
60
61
        $this->processor->process($request, $operation);
62
    }
63
}
64