annotate src/Generator/Generator.php @ 40:2cf26b593f4a ls_dev_2025_09 tip

better support for different column types
author Luka Sitas <sitas.luka.97@gmail.com>
date Thu, 16 Oct 2025 10:54:04 -0400
parents c062f013fd19
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
1 <?php
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
2
19
19b7a8de0019 updating namespace from typo
Luka Sitas <sitas.luka.97@gmail.com>
parents: 13
diff changeset
3 namespace Wizard\MagicForger\Generator;
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
4
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
5 use Symfony\Component\Console\Attribute\AsCommand;
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
6 use Symfony\Component\Console\Input\InputInterface;
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
7 use Symfony\Component\Console\Input\InputOption;
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
8 use Symfony\Component\Console\Output\OutputInterface;
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
9
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
10 #[AsCommand(name: 'mf')]
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
11 class Generator extends BaseGenerator
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
12 {
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
13 /**
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
14 * The name and signature of the console command.
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
15 *
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
16 * @var string
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
17 */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
18 protected $name = 'mf';
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
19
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
20 /**
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
21 * The console command description.
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
22 *
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
23 * @var string
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
24 */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
25 protected $description = 'Generates any (or all) of the available files.';
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
26
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
27 /**
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
28 * Execute the console command.
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
29 */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
30 public function handle()
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
31 {
23
827efbf4d73c Huge changes to the relationships for models and more complex
Luka Sitas <sitas.luka.97@gmail.com>
parents: 22
diff changeset
32
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
33 // First we need to ensure that the table exists, then we can
23
827efbf4d73c Huge changes to the relationships for models and more complex
Luka Sitas <sitas.luka.97@gmail.com>
parents: 22
diff changeset
34 if (! $this->tableExists($this->getTableInput())) {
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
35 $this->components->error('The table: "'.$this->getTableInput().'" does not exist in the database.');
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
36
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
37 return false;
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
38 }
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
39
7
769a17898cc0 Various changes to the generators and replacers - probably mostly just formatting
luka
parents: 5
diff changeset
40 /* $this->setCurrentTable($this->getTableInput()); */
769a17898cc0 Various changes to the generators and replacers - probably mostly just formatting
luka
parents: 5
diff changeset
41 /* dd($this->getCurrentTable()->getForeignKeys()); */
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
42
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
43 if ($this->option('all')) {
36
76584181267a Got factories working in a basic way, not sure how complex tables will handle it though
Luka Sitas <sitas.luka.97@gmail.com>
parents: 25
diff changeset
44 $this->input->setOption('factory', true);
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
45 /* $this->input->setOption('seed', true); */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
46 /* $this->input->setOption('migration', true); */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
47 $this->input->setOption('controller', true);
12
4bb4daa9e3f1 Working with the new FileModifier
luka
parents: 3
diff changeset
48 $this->input->setOption('model', true);
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
49 $this->input->setOption('request', true);
25
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
50 $this->input->setOption('view', true);
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
51 $this->input->setOption('route', true);
38
c062f013fd19 Making test a default with the -a option
Luka Sitas <sitas.luka.97@gmail.com>
parents: 37
diff changeset
52 $this->input->setOption('test', true);
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
53 }
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
54
36
76584181267a Got factories working in a basic way, not sure how complex tables will handle it though
Luka Sitas <sitas.luka.97@gmail.com>
parents: 25
diff changeset
55 if ($this->option('factory')) {
76584181267a Got factories working in a basic way, not sure how complex tables will handle it though
Luka Sitas <sitas.luka.97@gmail.com>
parents: 25
diff changeset
56 $this->createFactory();
76584181267a Got factories working in a basic way, not sure how complex tables will handle it though
Luka Sitas <sitas.luka.97@gmail.com>
parents: 25
diff changeset
57 }
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
58
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
59 /* if ($this->option('migration')) { */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
60 /* $this->createMigration(); */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
61 /* } */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
62
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
63 /* if ($this->option('seed')) { */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
64 /* $this->createSeeder(); */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
65 /* } */
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
66
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
67 if ($this->option('controller')) {
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
68 $this->createController();
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
69 }
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
70
12
4bb4daa9e3f1 Working with the new FileModifier
luka
parents: 3
diff changeset
71 if ($this->option('model')) {
4bb4daa9e3f1 Working with the new FileModifier
luka
parents: 3
diff changeset
72 $this->createModel();
4bb4daa9e3f1 Working with the new FileModifier
luka
parents: 3
diff changeset
73 }
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
74
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
75 if ($this->option('request')) {
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
76 $this->createRequest();
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
77 }
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
78
25
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
79 if ($this->option('view')) {
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
80 $this->createView();
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
81 }
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
82
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
83 if ($this->option('route')) {
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
84 $this->createRoute();
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
85 }
37
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
86
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
87 if ($this->option('test')) {
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
88 $this->createTest();
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
89 }
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
90 }
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
91
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
92 /**
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
93 * Get the console command options.
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
94 */
22
ee8ef14e158d Now able to include through composer
Luka Sitas <sitas.luka.97@gmail.com>
parents: 19
diff changeset
95 protected function getOptions(): array
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
96 {
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
97 return array_merge(parent::getOptions(), [
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
98 ['all', 'a', InputOption::VALUE_NONE, 'Generate a migration, seeder, factory, policy, resource controller, and form request classes for the table.'],
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
99 ['controller', 'c', InputOption::VALUE_NONE, 'Generate a controller class for the table.'],
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
100 ['model', 'm', InputOption::VALUE_NONE, 'Generate a model class for the table.'],
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
101 ['request', 'r', InputOption::VALUE_NONE, 'Generate base request classes for the table.'],
25
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
102 ['view', '', InputOption::VALUE_NONE, 'Generate base views for the table.'],
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
103 ['route', 'w', InputOption::VALUE_NONE, 'Generate base routes classes for the table.'],
37
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
104 ['factory', 'F', InputOption::VALUE_NONE, 'Generate base factory classes for the table.'],
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
105 ['test', 't', InputOption::VALUE_NONE, 'Generate base test classes for the table.'],
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
106 ]);
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
107 }
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
108
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
109 /**
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
110 * Interact further with the user if they were prompted for missing arguments.
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
111 */
23
827efbf4d73c Huge changes to the relationships for models and more complex
Luka Sitas <sitas.luka.97@gmail.com>
parents: 22
diff changeset
112 protected function afterPromptingForMissingArguments(InputInterface $input, OutputInterface $output): void {}
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
113
23
827efbf4d73c Huge changes to the relationships for models and more complex
Luka Sitas <sitas.luka.97@gmail.com>
parents: 22
diff changeset
114 protected function getStub(): void {}
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
115
22
ee8ef14e158d Now able to include through composer
Luka Sitas <sitas.luka.97@gmail.com>
parents: 19
diff changeset
116 protected function createController(): void
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
117 {
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
118 $this->call('mf:controller', ['table' => $this->getTableInput(), '--fresh' => $this->option('fresh')]);
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
119 }
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
120
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
121 protected function createModel()
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
122 {
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
123 $this->call('mf:model', ['table' => $this->getTableInput(), '--fresh' => $this->option('fresh')]);
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
124 }
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
125
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
126 protected function createRequest()
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
127 {
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
128 $this->call('mf:request', ['table' => $this->getTableInput(), '--fresh' => $this->option('fresh'), '--all' => true]);
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
129 }
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
130
25
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
131 protected function createView()
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
132 {
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
133 $this->call('mf:view', ['table' => $this->getTableInput(), '--fresh' => $this->option('fresh'), '--all' => true]);
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
134 }
1a717c7b211f added support for some basic views
Luka Sitas <sitas.luka.97@gmail.com>
parents: 23
diff changeset
135
5
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
136 protected function createRoute()
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
137 {
b0b2e79ad8e6 Not exatly sure what was changed but commiting to it :)
luka
parents: 3
diff changeset
138 $this->call('mf:route', ['table' => $this->getTableInput(), '--fresh' => $this->option('fresh')]);
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
139 }
36
76584181267a Got factories working in a basic way, not sure how complex tables will handle it though
Luka Sitas <sitas.luka.97@gmail.com>
parents: 25
diff changeset
140
76584181267a Got factories working in a basic way, not sure how complex tables will handle it though
Luka Sitas <sitas.luka.97@gmail.com>
parents: 25
diff changeset
141 protected function createFactory()
76584181267a Got factories working in a basic way, not sure how complex tables will handle it though
Luka Sitas <sitas.luka.97@gmail.com>
parents: 25
diff changeset
142 {
76584181267a Got factories working in a basic way, not sure how complex tables will handle it though
Luka Sitas <sitas.luka.97@gmail.com>
parents: 25
diff changeset
143 $this->call('mf:factory', ['table' => $this->getTableInput(), '--fresh' => $this->option('fresh')]);
76584181267a Got factories working in a basic way, not sure how complex tables will handle it though
Luka Sitas <sitas.luka.97@gmail.com>
parents: 25
diff changeset
144 }
37
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
145
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
146 protected function createTest()
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
147 {
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
148 $this->call('mf:test', ['table' => $this->getTableInput(), '--fresh' => $this->option('fresh')]);
116b36f5e73b Adding support for tests. It's pretty basic but we can improve later.
Luka Sitas <sitas.luka.97@gmail.com>
parents: 36
diff changeset
149 }
3
6468684362c2 It works! Created a controller, no update insert but it works
luka
parents:
diff changeset
150 }