17
17
use Symfony \Bundle \MakerBundle \ConsoleStyle ;
18
18
use Symfony \Bundle \MakerBundle \DependencyBuilder ;
19
19
use Symfony \Bundle \MakerBundle \Doctrine \DoctrineEntityHelper ;
20
- use Symfony \Bundle \MakerBundle \FileManager ;
21
20
use Symfony \Bundle \MakerBundle \Generator ;
22
- use Symfony \Bundle \MakerBundle \GeneratorHelper ;
23
21
use Symfony \Bundle \MakerBundle \InputConfiguration ;
24
22
use Symfony \Bundle \MakerBundle \Str ;
23
+ use Symfony \Bundle \MakerBundle \Validator ;
25
24
use Symfony \Bundle \TwigBundle \TwigBundle ;
26
25
use Symfony \Component \Console \Command \Command ;
27
26
use Symfony \Component \Console \Input \InputArgument ;
28
27
use Symfony \Component \Console \Input \InputInterface ;
28
+ use Symfony \Component \Console \Question \Question ;
29
29
use Symfony \Component \Form \AbstractType ;
30
30
use Symfony \Component \Security \Csrf \CsrfTokenManager ;
31
31
use Symfony \Component \Validator \Validation ;
35
35
*/
36
36
final class MakeCrud extends AbstractMaker
37
37
{
38
- private $ fileManager ;
39
38
private $ entityHelper ;
40
39
41
- public function __construct (FileManager $ fileManager , DoctrineEntityHelper $ entityHelper )
40
+ public function __construct (DoctrineEntityHelper $ entityHelper )
42
41
{
43
- $ this ->fileManager = $ fileManager ;
44
42
$ this ->entityHelper = $ entityHelper ;
45
43
}
46
44
@@ -59,66 +57,87 @@ public function configureCommand(Command $command, InputConfiguration $inputConf
59
57
->addArgument ('entity-class ' , InputArgument::OPTIONAL , sprintf ('The class name of the entity to create crud (e.g. <fg=yellow>%s</>) ' , Str::asClassName (Str::getRandomTerm ())))
60
58
->setHelp (file_get_contents (__DIR__ .'/../Resources/help/MakeCrud.txt ' ))
61
59
;
60
+
61
+ $ inputConfig ->setArgumentAsNonInteractive ('entity-class ' );
62
+ }
63
+
64
+ public function interact (InputInterface $ input , ConsoleStyle $ io , Command $ command )
65
+ {
66
+ $ argument = $ command ->getDefinition ()->getArgument ('entity-class ' );
67
+
68
+ $ question = new Question ($ argument ->getDescription ());
69
+ $ question ->setValidator ([Validator::class, 'notBlank ' ]);
70
+ $ question ->setAutocompleterValues ($ this ->entityHelper ->getEntitiesForAutocomplete ());
71
+
72
+ $ value = $ io ->askQuestion ($ question );
73
+
74
+ $ input ->setArgument ('entity-class ' , $ value );
62
75
}
63
76
64
77
public function generate (InputInterface $ input , ConsoleStyle $ io , Generator $ generator )
65
78
{
66
- $ entityClassNameDetails = $ generator ->createClassNameDetails (
79
+ $ entityClassDetails = $ generator ->createClassNameDetails (
67
80
$ input ->getArgument ('entity-class ' ),
68
81
'Entity \\'
69
82
);
70
83
71
- $ controllerClassNameDetails = $ generator ->createClassNameDetails (
72
- $ entityClassNameDetails ->getRelativeNameWithoutSuffix (),
84
+ $ repositoryClassDetails = $ generator ->createClassNameDetails (
85
+ $ entityClassDetails ->getRelativeName (),
86
+ 'Repository \\' ,
87
+ 'Repository '
88
+ );
89
+
90
+ $ controllerClassDetails = $ generator ->createClassNameDetails (
91
+ $ entityClassDetails ->getRelativeNameWithoutSuffix (),
73
92
'Controller \\' ,
74
93
'Controller '
75
94
);
76
95
77
- $ formClassNameDetails = $ generator ->createClassNameDetails (
78
- $ entityClassNameDetails ->getRelativeNameWithoutSuffix (),
96
+ $ formClassDetails = $ generator ->createClassNameDetails (
97
+ $ entityClassDetails ->getRelativeNameWithoutSuffix (),
79
98
'Form \\' ,
80
99
'Type '
81
100
);
82
101
83
- $ metadata = $ this ->entityHelper ->getEntityMetadata ($ entityClassNameDetails ->getFullName ());
84
- $ entityVarPlural = lcfirst (Inflector::pluralize ($ entityClassNameDetails ->getShortName ()));
85
- $ entityVarSingular = lcfirst (Inflector::singularize ($ entityClassNameDetails ->getShortName ()));
86
- $ routeName = Str::asRouteName ($ controllerClassNameDetails ->getRelativeNameWithoutSuffix ());
102
+ $ metadata = $ this ->entityHelper ->getEntityMetadata ($ entityClassDetails ->getFullName ());
103
+ $ entityVarPlural = lcfirst (Inflector::pluralize ($ entityClassDetails ->getShortName ()));
104
+ $ entityVarSingular = lcfirst (Inflector::singularize ($ entityClassDetails ->getShortName ()));
105
+ $ routeName = Str::asRouteName ($ controllerClassDetails ->getRelativeNameWithoutSuffix ());
87
106
88
107
$ generator ->generateClass (
89
- $ controllerClassNameDetails ->getFullName (),
108
+ $ controllerClassDetails ->getFullName (),
90
109
'crud/controller/Controller.tpl.php ' ,
91
110
[
92
- 'entity_full_class_name ' => $ entityClassNameDetails ->getFullName (),
93
- 'entity_class_name ' => $ entityClassNameDetails ->getShortName (),
94
- 'form_full_class_name ' => $ formClassNameDetails ->getFullName (),
95
- 'form_class_name ' => $ formClassNameDetails ->getShortName (),
96
- 'route_path ' => Str::asRoutePath ($ controllerClassNameDetails ->getRelativeNameWithoutSuffix ()),
111
+ 'entity_full_class_name ' => $ entityClassDetails ->getFullName (),
112
+ 'entity_class_name ' => $ entityClassDetails ->getShortName (),
113
+ 'repository_exists ' => class_exists ($ repositoryClassDetails ->getFullName ()),
114
+ 'repository_full_class_name ' => $ repositoryClassDetails ->getFullName (),
115
+ 'repository_class_name ' => $ repositoryClassDetails ->getShortName (),
116
+ 'repository_var ' => lcfirst (Inflector::singularize ($ repositoryClassDetails ->getShortName ())),
117
+ 'form_full_class_name ' => $ formClassDetails ->getFullName (),
118
+ 'form_class_name ' => $ formClassDetails ->getShortName (),
119
+ 'route_path ' => Str::asRoutePath ($ controllerClassDetails ->getRelativeNameWithoutSuffix ()),
97
120
'route_name ' => $ routeName ,
98
121
'entity_var_plural ' => $ entityVarPlural ,
99
122
'entity_var_singular ' => $ entityVarSingular ,
100
123
'entity_identifier ' => $ metadata ->identifier [0 ],
101
124
]
102
125
);
103
126
104
- $ formFields = $ this ->entityHelper ->getFormFieldsFromEntity ($ entityClassNameDetails ->getFullName ());
105
-
106
- $ helper = new GeneratorHelper ();
127
+ $ formFields = $ this ->entityHelper ->getFormFieldsFromEntity ($ entityClassDetails ->getFullName ());
107
128
108
129
$ generator ->generateClass (
109
- $ formClassNameDetails ->getFullName (),
130
+ $ formClassDetails ->getFullName (),
110
131
'form/Type.tpl.php ' ,
111
132
[
112
133
'entity_class_exists ' => true ,
113
- 'entity_full_class_name ' => $ entityClassNameDetails ->getFullName (),
114
- 'entity_class_name ' => $ entityClassNameDetails ->getShortName (),
134
+ 'entity_full_class_name ' => $ entityClassDetails ->getFullName (),
135
+ 'entity_class_name ' => $ entityClassDetails ->getShortName (),
115
136
'form_fields ' => $ formFields ,
116
- 'helper ' => $ helper ,
117
137
]
118
138
);
119
139
120
- $ baseLayoutExists = $ this ->fileManager ->fileExists ('templates/base.html.twig ' );
121
- $ templatesPath = Str::asFilePath ($ controllerClassNameDetails ->getRelativeNameWithoutSuffix ());
140
+ $ templatesPath = Str::asFilePath ($ controllerClassDetails ->getRelativeNameWithoutSuffix ());
122
141
123
142
$ templates = [
124
143
'_delete_form ' => [
@@ -128,33 +147,25 @@ public function generate(InputInterface $input, ConsoleStyle $io, Generator $gen
128
147
],
129
148
'_form ' => [],
130
149
'edit ' => [
131
- 'helper ' => $ helper ,
132
- 'base_layout_exists ' => $ baseLayoutExists ,
133
- 'entity_class_name ' => $ entityClassNameDetails ->getShortName (),
150
+ 'entity_class_name ' => $ entityClassDetails ->getShortName (),
134
151
'entity_var_singular ' => $ entityVarSingular ,
135
152
'entity_identifier ' => $ metadata ->identifier [0 ],
136
153
'route_name ' => $ routeName ,
137
154
],
138
155
'index ' => [
139
- 'helper ' => $ helper ,
140
- 'base_layout_exists ' => $ baseLayoutExists ,
141
- 'entity_class_name ' => $ entityClassNameDetails ->getShortName (),
156
+ 'entity_class_name ' => $ entityClassDetails ->getShortName (),
142
157
'entity_var_plural ' => $ entityVarPlural ,
143
158
'entity_var_singular ' => $ entityVarSingular ,
144
159
'entity_identifier ' => $ metadata ->identifier [0 ],
145
160
'entity_fields ' => $ metadata ->fieldMappings ,
146
161
'route_name ' => $ routeName ,
147
162
],
148
163
'new ' => [
149
- 'helper ' => $ helper ,
150
- 'base_layout_exists ' => $ baseLayoutExists ,
151
- 'entity_class_name ' => $ entityClassNameDetails ->getShortName (),
164
+ 'entity_class_name ' => $ entityClassDetails ->getShortName (),
152
165
'route_name ' => $ routeName ,
153
166
],
154
167
'show ' => [
155
- 'helper ' => $ helper ,
156
- 'base_layout_exists ' => $ baseLayoutExists ,
157
- 'entity_class_name ' => $ entityClassNameDetails ->getShortName (),
168
+ 'entity_class_name ' => $ entityClassDetails ->getShortName (),
158
169
'entity_var_singular ' => $ entityVarSingular ,
159
170
'entity_identifier ' => $ metadata ->identifier [0 ],
160
171
'entity_fields ' => $ metadata ->fieldMappings ,
0 commit comments