Passed
Push — master ( 5383f1...af8f48 )
by Gabriel
03:29
created

HasDefaultRouteTrait::initMvcRoute()   A

Complexity

Conditions 6
Paths 10

Size

Total Lines 19
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 0
Metric Value
cc 6
eloc 14
c 0
b 0
f 0
nc 10
nop 2
dl 0
loc 19
ccs 0
cts 15
cp 0
crap 42
rs 9.2222
1
<?php
2
3
namespace Nip\Router\Generator\Traits;
4
5
use Nip\Router\Route\Route;
6
7
/**
8
 * Trait HasDefaultRouteTrait
9
 * @package Nip\Router\Generator\Traits
10
 */
11
trait HasDefaultRouteTrait
12
{
13
14
    /**
15
     * {@inheritdoc}
16
     */
17
    public function generate($name, $parameters = [], $referenceType = self::ABSOLUTE_PATH)
0 ignored issues
show
Bug introduced by
The constant Nip\Router\Generator\Tra...uteTrait::ABSOLUTE_PATH was not found. Maybe you did not declare it correctly or list all dependencies?
Loading history...
18
    {
19
        $name = $this->initDefaultRoute($name, $parameters);
20
        return parent::generate($name, $parameters, $referenceType);
21
    }
22
23
    /**
24
     * @param $name
25
     * @param array $params
26
     * @return string
27
     */
28
    protected function initDefaultRoute($name, &$params = [])
29
    {
30
        $route = $this->hasRoute($name);
0 ignored issues
show
Bug introduced by
It seems like hasRoute() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

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

30
        /** @scrutinizer ignore-call */ 
31
        $route = $this->hasRoute($name);
Loading history...
31
        if ($route) {
32
            return $name;
33
        }
34
        return $this->initMvcRoute($name, $params);
35
    }
36
37
    /**
38
     * @param $name
39
     * @param array $params
40
     * @return string
41
     */
42
    protected function initMvcRoute($name, &$params = [])
43
    {
44
        $parts = explode(".", $name);
45
        $count = count($parts);
46
        if ($count > 3) {
47
            return $name;
48
        }
49
        $firstPart = strtolower(reset($parts));
50
        if (!in_array($firstPart, app('mvc.modules')->getNames())) {
51
            return $name;
52
        }
53
        $module = array_shift($parts);
54
        $params['controller'] = isset($parts[0]) ? $parts[0] : null;
55
        $params['action'] = isset($parts[1]) ? $parts[1] : null;
56
        $defaultRoute = $module . '.default';
57
        if ($this->hasRoute($defaultRoute)) {
58
            return $defaultRoute;
59
        }
60
        return $name;
61
    }
62
}
63