Completed
Push — master ( 402287...b4d64e )
by recca
02:03
created

ControllerMakeCommand::getPath()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Recca0120\Generator\Console;
4
5
use Symfony\Component\Console\Input\InputOption;
6
7
class ControllerMakeCommand extends GeneratorCommand
8
{
9
    /**
10
     * The console command name.
11
     *
12
     * @var string
13
     */
14
    protected $name = 'generate:controller';
15
16
    /**
17
     * The console command description.
18
     *
19
     * @var string
20
     */
21
    protected $description = 'Create a new controller';
22
23
    /**
24
     * The type of class being generated.
25
     *
26
     * @var string
27
     */
28
    protected $type = 'Controller';
29
30
    /**
31
     * Get the stub file for the generator.
32
     *
33
     * @return string
34
     */
35 1
    protected function getStub()
36
    {
37 1
        return __DIR__.'/../../resources/stubs/Http/Controllers/Controller.stub';
38
    }
39
40
    /**
41
     * Get the default namespace for the class.
42
     *
43
     * @param string $rootNamespace
44
     *
45
     * @return string
46
     */
47 1
    protected function getDefaultNamespace($rootNamespace)
48
    {
49 1
        return $rootNamespace.'\Http\Controllers';
50
    }
51
52
    /**
53
     * Build the class with the given name.
54
     *
55
     * @param string $name
56
     *
57
     * @return string
58
     */
59 1
    protected function buildClass($name)
60
    {
61 1
        $fullBaseClass = $this->getNamespace($name).'\Controller';
62 1
        $fullBaseClass = class_exists($fullBaseClass) === true ?
63 1
            $fullBaseClass : 'App\Http\Controllers\Controller';
64
65 1
        $fullBaseClass = $this->option('extend') ?: $fullBaseClass;
66 1
        $rootNamespace = trim($this->rootNamespace(), '\\');
67 1
        $namespace = $this->getNamespace($name);
68 1
        $baseClass = ltrim(str_replace($namespace, '', $name), '\\');
69 1
        $repositoryContractInterface = $rootNamespace.'\Repositories\Contracts\\'.$baseClass.'Repository';
70 1
        $repositoryClass = $rootNamespace.'\Repositories\\'.$baseClass.'Repository';
71 1
        $requestClass = $rootNamespace.'\Http\Requests\\'.$baseClass.'Request';
72
73 1
        if (class_exists($repositoryClass) === false) {
74 1
            $this->call('generate:repository', ['name' => $baseClass]);
75 1
        }
76
77 1
        if (class_exists($requestClass) === false) {
78 1
            $this->call('generate:request', ['name' => $baseClass]);
79 1
        }
80
81 1
        return $this->generator->setFullControllerClass($name.'Controller')
82 1
            ->setFullBaseClass($fullBaseClass)
0 ignored issues
show
Bug introduced by
It seems like $fullBaseClass defined by $this->option('extend') ?: $fullBaseClass on line 65 can also be of type array; however, Recca0120\Generator\Generator::setFullBaseClass() does only seem to accept string, maybe add an additional type check?

If a method or function can return multiple different values and unless you are sure that you only can receive a single value in this context, we recommend to add an additional type check:

/**
 * @return array|string
 */
function returnsDifferentValues($x) {
    if ($x) {
        return 'foo';
    }

    return array();
}

$x = returnsDifferentValues($y);
if (is_array($x)) {
    // $x is an array.
}

If this a common case that PHP Analyzer should handle natively, please let us know by opening an issue.

Loading history...
83 1
            ->setFullRepositoryInterface($repositoryContractInterface)
84 1
            ->setFullRequestClass($requestClass)
85 1
            ->render($this->getStub());
86
    }
87
88
    /**
89
     * Get the destination class path.
90
     *
91
     * @param string $name
92
     *
93
     * @return string
94
     */
95 1
    protected function getPath($name)
96
    {
97 1
        return str_replace('.php', 'Controller.php', parent::getPath($name));
98
    }
99
100
    /**
101
     * Get the console command options.
102
     *
103
     * @return array
104
     */
105 1
    protected function getOptions()
106
    {
107
        return [
108 1
            ['extend', '', InputOption::VALUE_OPTIONAL, 'controller extend.'],
109 1
        ];
110
    }
111
}
112