• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

orchestral / canvas / 9563332959

18 Jun 2024 10:23AM UTC coverage: 94.815%. Remained the same
9563332959

push

github

crynobone
wip

Signed-off-by: Mior Muhammad Zaki <crynobone@gmail.com>

640 of 675 relevant lines covered (94.81%)

24.78 hits per line

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

94.23
/src/Console/ControllerMakeCommand.php
1
<?php
2

3
namespace Orchestra\Canvas\Console;
4

5
use Illuminate\Filesystem\Filesystem;
6
use Orchestra\Canvas\Core\Concerns\CodeGenerator;
7
use Orchestra\Canvas\Core\Concerns\TestGenerator;
8
use Orchestra\Canvas\Core\Concerns\UsesGeneratorOverrides;
9
use Symfony\Component\Console\Attribute\AsCommand;
10

11
/**
12
 * @see https://github.com/laravel/framework/blob/10.x/src/Illuminate/Routing/Console/ControllerMakeCommand.php
13
 */
14
#[AsCommand(name: 'make:controller', description: 'Create a new controller class')]
15
class ControllerMakeCommand extends \Illuminate\Routing\Console\ControllerMakeCommand
16
{
17
    use CodeGenerator;
18
    use TestGenerator;
19
    use UsesGeneratorOverrides;
20

21
    /**
22
     * Create a new creator command instance.
23
     *
24
     * @return void
25
     */
26
    public function __construct(Filesystem $files)
27
    {
28
        parent::__construct($files);
15✔
29

30
        $this->addGeneratorPresetOptions();
15✔
31
    }
32

33
    /**
34
     * Execute the console command.
35
     *
36
     * @return bool|null
37
     *
38
     * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
39
     */
40
    #[\Override]
41
    public function handle()
42
    {
43
        /** @phpstan-ignore return.type */
44
        return $this->generateCode() ? self::SUCCESS : self::FAILURE;
15✔
45
    }
46

47
    /**
48
     * Qualify the given model class base name.
49
     *
50
     * @param  string  $model
51
     * @return string
52
     */
53
    #[\Override]
54
    protected function qualifyModel(string $model)
55
    {
56
        return $this->qualifyModelUsingCanvas($model);
7✔
57
    }
58

59
    /**
60
     * Build the replacements for a parent controller.
61
     *
62
     * @return array
63
     */
64
    #[\Override]
65
    protected function buildParentReplacements()
66
    {
67
        /** @phpstan-ignore argument.type */
68
        $parentModelClass = $this->parseModel($this->option('parent'));
2✔
69

70
        if (! class_exists($parentModelClass) &&
2✔
71
            $this->components->confirm("A {$parentModelClass} model does not exist. Do you want to generate it?", true)) {
2✔
72
            $this->call('make:model', ['name' => $parentModelClass, '--preset' => $this->option('preset')]);
×
73
        }
74

75
        return [
2✔
76
            'ParentDummyFullModelClass' => $parentModelClass,
2✔
77
            '{{ namespacedParentModel }}' => $parentModelClass,
2✔
78
            '{{namespacedParentModel}}' => $parentModelClass,
2✔
79
            'ParentDummyModelClass' => class_basename($parentModelClass),
2✔
80
            '{{ parentModel }}' => class_basename($parentModelClass),
2✔
81
            '{{parentModel}}' => class_basename($parentModelClass),
2✔
82
            'ParentDummyModelVariable' => lcfirst(class_basename($parentModelClass)),
2✔
83
            '{{ parentModelVariable }}' => lcfirst(class_basename($parentModelClass)),
2✔
84
            '{{parentModelVariable}}' => lcfirst(class_basename($parentModelClass)),
2✔
85
        ];
2✔
86
    }
87

88
    /**
89
     * Build the model replacement values.
90
     *
91
     * @param  array  $replace
92
     * @return array
93
     */
94
    #[\Override]
95
    protected function buildModelReplacements(array $replace)
96
    {
97
        /** @phpstan-ignore argument.type */
98
        $modelClass = $this->parseModel($this->option('model'));
7✔
99

100
        if (! class_exists($modelClass) && $this->components->confirm("A {$modelClass} model does not exist. Do you want to generate it?", true)) {
7✔
101
            $this->call('make:model', ['name' => $modelClass, '--preset' => $this->option('preset')]);
×
102
        }
103

104
        $replace = $this->buildFormRequestReplacements($replace, $modelClass);
7✔
105

106
        if ($this->option('requests')) {
7✔
107
            $namespace = $this->rootNamespace();
2✔
108
            $replace['{{ namespacedRequests }}'] = str_replace('App\\', $namespace, $replace['{{ namespacedRequests }}']);
2✔
109
            $replace['{{namespacedRequests}}'] = str_replace('App\\', $namespace, $replace['{{namespacedRequests}}']);
2✔
110
        }
111

112
        return array_merge($replace, [
7✔
113
            'DummyFullModelClass' => $modelClass,
7✔
114
            '{{ namespacedModel }}' => $modelClass,
7✔
115
            '{{namespacedModel}}' => $modelClass,
7✔
116
            'DummyModelClass' => class_basename($modelClass),
7✔
117
            '{{ model }}' => class_basename($modelClass),
7✔
118
            '{{model}}' => class_basename($modelClass),
7✔
119
            'DummyModelVariable' => lcfirst(class_basename($modelClass)),
7✔
120
            '{{ modelVariable }}' => lcfirst(class_basename($modelClass)),
7✔
121
            '{{modelVariable}}' => lcfirst(class_basename($modelClass)),
7✔
122
        ]);
7✔
123
    }
124

125
    /**
126
     * Get the destination class path.
127
     *
128
     * @param  string  $name
129
     * @return string
130
     */
131
    #[\Override]
132
    protected function getPath($name)
133
    {
134
        return $this->getPathUsingCanvas($name);
15✔
135
    }
136

137
    /**
138
     * Get the root namespace for the class.
139
     *
140
     * @return string
141
     */
142
    #[\Override]
143
    protected function rootNamespace()
144
    {
145
        return $this->rootNamespaceUsingCanvas();
15✔
146
    }
147

148
    /**
149
     * Get a list of possible model names.
150
     *
151
     * @return array<int, string>
152
     */
153
    #[\Override]
154
    protected function possibleModels()
155
    {
156
        return $this->possibleModelsUsingCanvas();
×
157
    }
158

159
    /**
160
     * Generate the form requests for the given model and classes.
161
     *
162
     * @param  string  $modelClass
163
     * @param  string  $storeRequestClass
164
     * @param  string  $updateRequestClass
165
     * @return array
166
     */
167
    #[\Override]
168
    protected function generateFormRequests($modelClass, $storeRequestClass, $updateRequestClass)
169
    {
170
        $storeRequestClass = 'Store'.class_basename($modelClass).'Request';
2✔
171

172
        $this->call('make:request', [
2✔
173
            'name' => $storeRequestClass,
2✔
174
            '--preset' => $this->option('preset'),
2✔
175
        ]);
2✔
176

177
        $updateRequestClass = 'Update'.class_basename($modelClass).'Request';
2✔
178

179
        $this->call('make:request', [
2✔
180
            'name' => $updateRequestClass,
2✔
181
            '--preset' => $this->option('preset'),
2✔
182
        ]);
2✔
183

184
        return [$storeRequestClass, $updateRequestClass];
2✔
185
    }
186
}
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

© 2026 Coveralls, Inc