ActionTrait   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 95
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 4
Bugs 0 Features 1
Metric Value
wmc 8
c 4
b 0
f 1
lcom 1
cbo 2
dl 0
loc 95
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A get_action() 0 4 1
A resolve_action_args() 0 4 1
A action() 0 6 1
A resolve_action() 0 18 2
A resolve_action_method() 0 19 3
1
<?php
2
3
/*
4
 * This file is part of the ICanBoogie package.
5
 *
6
 * (c) Olivier Laviale <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace ICanBoogie\Routing\Controller;
13
14
use ICanBoogie\HTTP\Request;
15
use ICanBoogie\HTTP\Response;
16
use ICanBoogie\Routing\ActionNotDefined;
17
use ICanBoogie\Routing\Route;
18
19
/**
20
 * Action controller implementation.
21
 *
22
 * @property-read Route $route
23
 * @property-read string $action The action being executed.
24
 */
25
trait ActionTrait
26
{
27
    /**
28
     * Returns the action being executed.
29
     *
30
     * @return string
31
     */
32
    protected function get_action()
33
    {
34
        return $this->route->action;
35
    }
36
37
    /**
38
     * Dispatch the request to the appropriate method.
39
     *
40
     * The {@link $request} property is initialized.
41
     *
42
     * @param Request $request
43
     *
44
     * @return Response|mixed
45
     */
46
    protected function action(Request $request)
47
    {
48
        $callable = $this->resolve_action($request);
49
50
        return $callable();
51
    }
52
53
    /**
54
     * Resolves the action into a callable.
55
     *
56
     * @param Request $request
57
     *
58
     * @return callable
59
     */
60
    protected function resolve_action(Request $request)
61
    {
62
        $action = $this->action;
63
64
        if (!$action)
65
        {
66
            throw new ActionNotDefined("Action not defined in route {$this->route->id}.");
67
        }
68
69
        $method = $this->resolve_action_method($action, $request);
70
        $args = $this->resolve_action_args($action, $request);
71
72
        return function() use ($method, $args) {
73
74
            return call_user_func_array([ $this, $method ], $args);
75
76
        };
77
    }
78
79
    /**
80
     * Resolves the method associated with the action.
81
     *
82
     * @param string $action Action name.
83
     * @param Request $request
84
     *
85
     * @return string The method name.
86
     */
87
    protected function resolve_action_method($action, Request $request)
88
    {
89
        $action = strtr($action, '-', '_');
90
        $method = 'action_' . strtolower($request->method) . '_' . $action;
91
92
        if (method_exists($this, $method))
93
        {
94
            return $method;
95
        }
96
97
        $method = 'action_any_' . $action;
98
99
        if (method_exists($this, $method))
100
        {
101
            return $method;
102
        }
103
104
        return $method = 'action_' . $action;
0 ignored issues
show
Unused Code introduced by
$method is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
105
    }
106
107
    /**
108
     * Resolves the arguments associated with the action.
109
     *
110
     * @param string $action Action name.
111
     * @param Request $request
112
     *
113
     * @return array The arguments for the action.
114
     */
115
    protected function resolve_action_args($action, Request $request)
0 ignored issues
show
Unused Code introduced by
The parameter $action is not used and could be removed.

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

Loading history...
116
    {
117
        return array_values($request->path_params);
118
    }
119
}
120