Completed
Push — master ( 810e98...a03780 )
by Rafael
16:20
created

AbstractController   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 84
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 7
Metric Value
wmc 8
lcom 0
cbo 7
dl 0
loc 84
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getCurrentRequest() 0 4 1
A getBundleName() 0 10 2
A getActionName() 0 7 1
A apiResponse() 0 11 3
A createInvalidEntityException() 0 4 1
1
<?php
2
3
namespace Mero\BaseBundle\Controller;
4
5
use Mero\BaseBundle\Exception\InvalidEntityException;
6
use Mero\BaseBundle\Exception\UnsupportedFormatException;
7
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
8
use Symfony\Component\HttpFoundation\JsonResponse;
9
use Symfony\Component\HttpFoundation\Request;
10
use Symfony\Component\HttpFoundation\Response;
11
12
class AbstractController extends Controller
13
{
14
    /**
15
     * Gets the current request object.
16
     *
17
     * @return Request
18
     */
19
    protected function getCurrentRequest()
20
    {
21
        return $this->container->get('request_stack')->getCurrentRequest();
22
    }
23
24
    /**
25
     * Gets the bundle name.
26
     *
27
     * <b>Attention! This method returns the bundle name as the conventions of framewok.</b>
28
     * Example: "Mero/Bundle/BaseBundle" or "Mero/BaseBundle" returns "MeroBaseBundle".
29
     *
30
     * @return string
31
     */
32
    protected function getBundleName()
33
    {
34
        $matches = [];
35
        $className = str_replace('\Bundle\\', '', get_class($this));
36
        preg_match('/(.*)\\\Controller/', $className, $matches);
37
38
        return count($matches) != 0
39
            ? $matches[1]
40
            : null;
41
    }
42
43
    /**
44
     * Gets the action name.
45
     *
46
     * @return string Action name
47
     */
48
    protected function getActionName()
49
    {
50
        $request = $this->getCurrentRequest();
51
        $action = explode('::', $request->attributes->get('_controller'));
52
53
        return $action[1];
54
    }
55
56
    /**
57
     * Return JSON response.
58
     *
59
     * @param mixed $data    The response data
60
     * @param int   $status  The response status code
61
     * @param string $format Response format(json or xml)
62
     *
63
     * @throws UnsupportedFormatException When format is not json or xml
64
     *
65
     * @return JsonResponse
66
     */
67
    protected function apiResponse($data, $status, $format = 'json')
68
    {
69
        if (($format != 'json') && ($format != 'xml')) {
70
            throw new UnsupportedFormatException();
71
        }
72
73
        return new Response(
74
            $this->container->get('serializer')->serialize($data, $format),
75
            $status
76
        );
77
    }
78
79
    /**
80
     * Returns a InvalidEntityException.
81
     *
82
     * This method returns an invalid entity exception. Usage exemple:
83
     *
84
     *     throw $this->createInvalidEntityException('Invalid entity');
85
     *
86
     * @param string          $message  A message
87
     * @param \Exception|null $previous The previous exception
88
     *
89
     * @return InvalidEntityException
90
     */
91
    protected function createInvalidEntityException($message = 'Entity is not object', \Exception $previous = null)
92
    {
93
        return new InvalidEntityException($message, $previous);
94
    }
95
}
96