• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In
Build has been canceled!

codeigniter4 / CodeIgniter4 / 8677009716

13 Apr 2024 11:45PM UTC coverage: 84.44% (-2.2%) from 86.607%
8677009716

push

github

web-flow
Merge pull request #8776 from kenjis/fix-findQualifiedNameFromPath-Cannot-declare-class-v3

fix: Cannot declare class CodeIgniter\Config\Services, because the name is already in use

0 of 3 new or added lines in 1 file covered. (0.0%)

478 existing lines in 72 files now uncovered.

20318 of 24062 relevant lines covered (84.44%)

188.23 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

93.33
/system/Commands/Generators/ControllerGenerator.php
1
<?php
2

3
declare(strict_types=1);
4

5
/**
6
 * This file is part of CodeIgniter 4 framework.
7
 *
8
 * (c) CodeIgniter Foundation <admin@codeigniter.com>
9
 *
10
 * For the full copyright and license information, please view
11
 * the LICENSE file that was distributed with this source code.
12
 */
13

14
namespace CodeIgniter\Commands\Generators;
15

16
use CodeIgniter\CLI\BaseCommand;
17
use CodeIgniter\CLI\CLI;
18
use CodeIgniter\CLI\GeneratorTrait;
19
use CodeIgniter\Controller;
20
use CodeIgniter\RESTful\ResourceController;
21
use CodeIgniter\RESTful\ResourcePresenter;
22

23
/**
24
 * Generates a skeleton controller file.
25
 */
26
class ControllerGenerator extends BaseCommand
27
{
28
    use GeneratorTrait;
29

30
    /**
31
     * The Command's Group
32
     *
33
     * @var string
34
     */
35
    protected $group = 'Generators';
36

37
    /**
38
     * The Command's Name
39
     *
40
     * @var string
41
     */
42
    protected $name = 'make:controller';
43

44
    /**
45
     * The Command's Description
46
     *
47
     * @var string
48
     */
49
    protected $description = 'Generates a new controller file.';
50

51
    /**
52
     * The Command's Usage
53
     *
54
     * @var string
55
     */
56
    protected $usage = 'make:controller <name> [options]';
57

58
    /**
59
     * The Command's Arguments
60
     *
61
     * @var array<string, string>
62
     */
63
    protected $arguments = [
64
        'name' => 'The controller class name.',
65
    ];
66

67
    /**
68
     * The Command's Options
69
     *
70
     * @var array<string, string>
71
     */
72
    protected $options = [
73
        '--bare'      => 'Extends from CodeIgniter\Controller instead of BaseController.',
74
        '--restful'   => 'Extends from a RESTful resource, Options: [controller, presenter]. Default: "controller".',
75
        '--namespace' => 'Set root namespace. Default: "APP_NAMESPACE".',
76
        '--suffix'    => 'Append the component title to the class name (e.g. User => UserController).',
77
        '--force'     => 'Force overwrite existing file.',
78
    ];
79

80
    /**
81
     * Actually execute a command.
82
     */
83
    public function run(array $params)
84
    {
85
        $this->component = 'Controller';
13✔
86
        $this->directory = 'Controllers';
13✔
87
        $this->template  = 'controller.tpl.php';
13✔
88

89
        $this->classNameLang = 'CLI.generator.className.controller';
13✔
90
        $this->generateClass($params);
13✔
91
    }
92

93
    /**
94
     * Prepare options and do the necessary replacements.
95
     */
96
    protected function prepare(string $class): string
97
    {
98
        $bare = $this->getOption('bare');
13✔
99
        $rest = $this->getOption('restful');
13✔
100

101
        $useStatement = trim(APP_NAMESPACE, '\\') . '\Controllers\BaseController';
13✔
102
        $extends      = 'BaseController';
13✔
103

104
        // Gets the appropriate parent class to extend.
105
        if ($bare || $rest) {
13✔
106
            if ($bare) {
5✔
107
                $useStatement = Controller::class;
2✔
108
                $extends      = 'Controller';
2✔
109
            } elseif ($rest) {
3✔
110
                $rest = is_string($rest) ? $rest : 'controller';
3✔
111

112
                if (! in_array($rest, ['controller', 'presenter'], true)) {
3✔
113
                    // @codeCoverageIgnoreStart
UNCOV
114
                    $rest = CLI::prompt(lang('CLI.generator.parentClass'), ['controller', 'presenter'], 'required');
×
UNCOV
115
                    CLI::newLine();
×
116
                    // @codeCoverageIgnoreEnd
117
                }
118

119
                if ($rest === 'controller') {
3✔
120
                    $useStatement = ResourceController::class;
2✔
121
                    $extends      = 'ResourceController';
2✔
122
                } elseif ($rest === 'presenter') {
1✔
123
                    $useStatement = ResourcePresenter::class;
1✔
124
                    $extends      = 'ResourcePresenter';
1✔
125
                }
126
            }
127
        }
128

129
        return $this->parseTemplate(
13✔
130
            $class,
13✔
131
            ['{useStatement}', '{extends}'],
13✔
132
            [$useStatement, $extends],
13✔
133
            ['type' => $rest]
13✔
134
        );
13✔
135
    }
136
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc