SampleController   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 197
Duplicated Lines 0 %

Test Coverage

Coverage 41.67%

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 197
ccs 10
cts 24
cp 0.4167
rs 10
c 0
b 0
f 0
wmc 11

11 Methods

Rating   Name   Duplication   Size   Complexity  
A createActionGet() 0 4 1
A initialize() 0 4 1
A dumpDiActionGet() 0 5 1
A indexAction() 0 4 1
A variadicActionGet() 0 4 1
A argumentActionGet() 0 4 1
A createActionPost() 0 4 1
A typedArgumentActionGet() 0 4 1
A defaultArgumentActionGet() 0 4 1
A infoActionGet() 0 4 1
A catchAll() 0 5 1
1
<?php
2
3
namespace Anax\Controller;
4
5
use Anax\Commons\ContainerInjectableInterface;
6
use Anax\Commons\ContainerInjectableTrait;
7
8
// use Anax\Route\Exception\ForbiddenException;
9
// use Anax\Route\Exception\NotFoundException;
10
// use Anax\Route\Exception\InternalErrorException;
11
12
/**
13
 * A sample controller to show how a controller class can be implemented.
14
 * The controller will be injected with $di if implementing the interface
15
 * ContainerInjectableInterface, like this sample class does.
16
 * The controller is mounted on a particular route and can then handle all
17
 * requests for that mount point.
18
 *
19
 * @SuppressWarnings(PHPMD.TooManyPublicMethods)
20
 */
21
class SampleController implements ContainerInjectableInterface
22
{
23
    use ContainerInjectableTrait;
24
25
26
27
    /**
28
     * @var string $db a sample member variable that gets initialised
29
     */
30
    private $db = "not active";
31
32
33
34
    /**
35
     * The initialize method is optional and will always be called before the
36
     * target method/action. This is a convienient method where you could
37
     * setup internal properties that are commonly used by several methods.
38
     *
39
     * @return void
40
     */
41 3
    public function initialize() : void
42
    {
43
        // Use to initialise member variables.
44 3
        $this->db = "active";
45 3
    }
46
47
48
49
    /**
50
     * This is the index method action, it handles:
51
     * ANY METHOD mountpoint
52
     * ANY METHOD mountpoint/
53
     * ANY METHOD mountpoint/index
54
     *
55
     * @return string
56
     */
57 1
    public function indexAction() : string
58
    {
59
        // Deal with the action and return a response.
60 1
        return __METHOD__ . ", \$db is {$this->db}";
61
    }
62
63
64
65
    /**
66
     * This sample method dumps the content of $di.
67
     * GET mountpoint/dump-app
68
     *
69
     * @return string
70
     */
71 1
    public function dumpDiActionGet() : string
72
    {
73
        // Deal with the action and return a response.
74 1
        $services = implode(", ", $this->di->getServices());
75 1
        return __METHOD__ . "<p>\$di contains: $services";
76
    }
77
78
79
80
    /**
81
     * Add the request method to the method name to limit what request methods
82
     * the handler supports.
83
     * GET mountpoint/info
84
     *
85
     * @return string
86
     */
87 1
    public function infoActionGet() : string
88
    {
89
        // Deal with the action and return a response.
90 1
        return __METHOD__ . ", \$db is {$this->db}";
91
    }
92
93
94
95
    /**
96
     * This sample method action it the handler for route:
97
     * GET mountpoint/create
98
     *
99
     * @return string
100
     */
101
    public function createActionGet() : string
102
    {
103
        // Deal with the action and return a response.
104
        return __METHOD__ . ", \$db is {$this->db}";
105
    }
106
107
108
109
    /**
110
     * This sample method action it the handler for route:
111
     * POST mountpoint/create
112
     *
113
     * @return string
114
     */
115
    public function createActionPost() : string
116
    {
117
        // Deal with the action and return a response.
118
        return __METHOD__ . ", \$db is {$this->db}";
119
    }
120
121
122
123
    /**
124
     * This sample method action takes one argument:
125
     * GET mountpoint/argument/<value>
126
     *
127
     * @param mixed $value
128
     *
129
     * @return string
130
     */
131
    public function argumentActionGet($value) : string
132
    {
133
        // Deal with the action and return a response.
134
        return __METHOD__ . ", \$db is {$this->db}, got argument '$value'";
135
    }
136
137
138
139
    /**
140
     * This sample method action takes zero or one argument and you can use - as a separator which will then be removed:
141
     * GET mountpoint/defaultargument/
142
     * GET mountpoint/defaultargument/<value>
143
     * GET mountpoint/default-argument/
144
     * GET mountpoint/default-argument/<value>
145
     *
146
     * @param mixed $value with a default string.
147
     *
148
     * @return string
149
     */
150
    public function defaultArgumentActionGet($value = "default") : string
151
    {
152
        // Deal with the action and return a response.
153
        return __METHOD__ . ", \$db is {$this->db}, got argument '$value'";
154
    }
155
156
157
158
    /**
159
     * This sample method action takes two typed arguments:
160
     * GET mountpoint/typed-argument/<string>/<int>
161
     *
162
     * NOTE. Its recommended to not use int as type since it will still
163
     * accept numbers such as 2hundred givving a PHP NOTICE. So, its better to
164
     * deal with type check within the action method and throuw exceptions
165
     * when the expected type is not met.
166
     *
167
     * @param mixed $value with a default string.
168
     *
169
     * @return string
170
     */
171
    public function typedArgumentActionGet(string $str, int $int) : string
172
    {
173
        // Deal with the action and return a response.
174
        return __METHOD__ . ", \$db is {$this->db}, got string argument '$str' and int argument '$int'.";
175
    }
176
177
178
179
    /**
180
     * This sample method action takes a variadic list of arguments:
181
     * GET mountpoint/variadic/
182
     * GET mountpoint/variadic/<value>
183
     * GET mountpoint/variadic/<value>/<value>
184
     * GET mountpoint/variadic/<value>/<value>/<value>
185
     * etc.
186
     *
187
     * @param array $value as a variadic parameter.
188
     *
189
     * @return string
190
     */
191
    public function variadicActionGet(...$value) : string
192
    {
193
        // Deal with the action and return a response.
194
        return __METHOD__ . ", \$db is {$this->db}, got '" . count($value) . "' arguments: " . implode(", ", $value);
195
    }
196
197
198
199
    /**
200
     * Adding an optional catchAll() method will catch all actions sent to the
201
     * router. You can then reply with an actual response or return void to
202
     * allow for the router to move on to next handler.
203
     * A catchAll() handles the following, if a specific action method is not
204
     * created:
205
     * ANY METHOD mountpoint/**
206
     *
207
     * @param array $args as a variadic parameter.
208
     *
209
     * @return mixed
210
     *
211
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
212
     */
213
    public function catchAll(...$args)
0 ignored issues
show
Unused Code introduced by
The parameter $args is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

213
    public function catchAll(/** @scrutinizer ignore-unused */ ...$args)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
214
    {
215
        // Deal with the request and send an actual response, or not.
216
        //return __METHOD__ . ", \$db is {$this->db}, got '" . count($args) . "' arguments: " . implode(", ", $args);
217
        return;
218
    }
219
}
220