ControllerTrait   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 34
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 16
dl 0
loc 34
rs 10
c 1
b 0
f 0
wmc 5

1 Method

Rating   Name   Duplication   Size   Complexity  
A addController() 0 25 5
1
<?php
2
declare(strict_types=1);
3
4
namespace Utilities\Router\Traits;
5
6
use Utilities\Router\Application;
7
use Utilities\Router\Controller;
8
use Utilities\Router\Router;
9
10
/**
11
 * ControllerTrait class
12
 *
13
 * @link    https://github.com/utilities-php/router
14
 * @author  Shahrad Elahi (https://github.com/shahradelahi)
15
 * @license https://github.com/utilities-php/router/blob/master/LICENSE (MIT License)
16
 */
17
trait ControllerTrait
18
{
19
20
    /**
21
     * Set the controllers
22
     *
23
     * @param array $input [slug => {controller, uri}]
24
     * @return void
25
     */
26
    public function addController(array $input): void
27
    {
28
        $controllers = [];
29
        foreach ($input as $controller) {
30
            $key = array_key_first($controller);
31
            $controllers[$key] = $controller[$key];
32
        }
33
34
        foreach ($controllers as $slug => $value) {
35
            if (!is_subclass_of($value['controller'], Controller::class)) {
36
                throw new \RuntimeException(sprintf(
37
                    'Class `%s` must be a instance of `%s`',
38
                    $value['controller'],
39
                    Controller::class
40
                ));
41
            }
42
43
            if (in_array($slug, Application::$reservedWords)) {
44
                throw new \RuntimeException(sprintf(
45
                    'The slug `%s` is reserved word',
46
                    $slug
47
                ));
48
            }
49
50
            Router::controller($slug, $value['uri'], $value['controller']);
51
        }
52
    }
53
54
}