Passed
Push — main ( 93c2a6...737a66 )
by Dimitri
03:08
created

Scaffold::execute()   B

Complexity

Conditions 9
Paths 192

Size

Total Lines 42
Code Lines 24

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 90

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 9
eloc 24
c 1
b 0
f 0
nc 192
nop 1
dl 0
loc 42
ccs 0
cts 13
cp 0
crap 90
rs 7.2888
1
<?php
2
3
/**
4
 * This file is part of Blitz PHP framework.
5
 *
6
 * (c) 2022 Dimitri Sitchet Tomkeu <[email protected]>
7
 *
8
 * For the full copyright and license information, please view
9
 * the LICENSE file that was distributed with this source code.
10
 */
11
12
namespace BlitzPHP\Cli\Commands\Generators;
13
14
use BlitzPHP\Cli\Console\Command;
0 ignored issues
show
Bug introduced by
This use statement conflicts with another class in this namespace, BlitzPHP\Cli\Commands\Generators\Command. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
15
use BlitzPHP\Cli\Traits\GeneratorTrait;
16
17
/**
18
 * Génère un ensemble complet de fichiers d'échafaudage.
19
 */
20
class Scaffold extends Command
21
{
22
    use GeneratorTrait;
23
24
    /**
25
     * {@inheritDoc}
26
     */
27
    protected $group = 'Generateurs';
28
29
    /**
30
     * {@inheritDoc}
31
     */
32
    protected $name = 'make:scaffold';
33
34
    /**
35
     * {@inheritDoc}
36
     */
37
    protected $description = 'Génère un ensemble complet de fichiers d\'échafaudage.';
38
39
    /**
40
     * @var string
41
     */
42
    protected $service = 'Service de génération de code';
43
44
    /**
45
     * {@inheritDoc}
46
     */
47
    protected $arguments = [
48
        'name' => 'Le nom de la classe.',
49
    ];
50
51
    /**
52
     * {@inheritDoc}
53
     */
54
    protected $options = [
55
        '--bare'      => 'Ajoute l\'option "--bare" au composant du contrôleur.',
56
        '--restful'   => 'Ajoute l\'option "--restful" au composant du contrôleur.',
57
        '--table'     => 'Ajoute l\'option "--table" au composant du modèle.',
58
        '--dbgroup'   => 'Ajoute l\'option "--dbgroup" au composant du modèle.',
59
        '--return'    => 'Ajoute l\'option "--return" au composant du modèle.',
60
        '--namespace' => ["Définissez l'espace de noms racine. Par défaut\u{a0}: \"APP_NAMESPACE\".", APP_NAMESPACE],
61
        '--suffix'    => ['Ajoutez le titre du composant au nom de la classe (par exemple, User => UserController).', true],
62
        '--force'     => 'Forcer l\'écrasement du fichier existant.',
63
     ];
64
65
    /**
66
     * {@inheritDoc}
67
     */
68
    public function execute(array $params)
69
    {
70
        $options = [];
71
72
        if (null !== $namespace = $this->option('namespace')) {
73
            $options['namespace'] = $namespace;
74
        }
75
76
        if ($this->option('suffix')) {
77
            $options['suffix'] = true;
78
        }
79
80
        if ($this->option('force')) {
81
            $options['force'] = true;
82
        }
83
84
        $controllerOpts = [];
85
86
        if ($this->option('bare')) {
87
            $controllerOpts['bare'] = true;
88
        } elseif (null !== $restful = $this->option('restful')) {
89
            $controllerOpts['restful'] = $restful;
90
        }
91
92
        $modelOpts = [
93
            'table'   => $this->option('table'),
94
            'dbgroup' => $this->option('dbgroup'),
95
            'return'  => $this->option('return'),
96
        ];
97
98
        $name = ['name' => $this->argument('name')];
99
100
        $this->call('make:controller', $name, array_merge($controllerOpts, $options));
101
102
        if ($this->commandExists('make:model')) {
103
            $this->call('make:model', $name, array_merge($modelOpts, $options));
104
        }
105
        if ($this->commandExists('make:migration')) {
106
            $this->call('make:migration', $name, array_merge($options));
107
        }
108
        if ($this->commandExists('make:seeder')) {
109
            $this->call('make:seeder', $name, array_merge($options));
110
        }
111
    }
112
}
113