Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
11 | class Generator |
||
12 | { |
||
13 | 32 | public function __construct() { |
|
14 | 32 | $this->DEFAULTS = [ |
|
|
|||
15 | 'namespace' => '', |
||
16 | 'directories' => [ |
||
17 | // path |
||
18 | ], |
||
19 | 'files' => [ |
||
20 | // path |
||
21 | ], |
||
22 | 'paths' => [ |
||
23 | // role => path |
||
24 | ], |
||
25 | 'providers' => [ |
||
26 | // class |
||
27 | ], |
||
28 | 'commands' => [ |
||
29 | // class |
||
30 | ], |
||
31 | 'middleware' => [ |
||
32 | // name => class |
||
33 | ], |
||
34 | 'routes' => [ |
||
35 | // domain => string |
||
36 | // prefix => string |
||
37 | // namespace => string |
||
38 | // middleware => array |
||
39 | // files => array |
||
40 | ], |
||
41 | 'aliases' => [ |
||
42 | // name => class |
||
43 | ], |
||
44 | 'includes_global_aliases' => true, |
||
45 | ]; |
||
46 | 32 | } |
|
47 | |||
48 | /** |
||
49 | * @param string $path |
||
50 | * @param string $type |
||
51 | * @param array $properties |
||
52 | */ |
||
53 | 15 | public function generateAddon($path, $type, array $properties) |
|
61 | |||
62 | 4 | protected function generateMinimum(FileGenerator $generator, array $properties) |
|
68 | |||
69 | protected function generateSimple(FileGenerator $generator, array $properties) |
||
70 | { |
||
71 | 1 | $generator->directory('classes', function ($generator) use ($properties) { |
|
72 | 1 | $generator->directory('Providers') |
|
73 | 1 | ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties); |
|
74 | 1 | $generator->directory('Providers') |
|
75 | 1 | ->file('RouteServiceProvider.php')->template('RouteServiceProvider.php', $properties); |
|
76 | |||
77 | 1 | $generator->keepDirectory('Controllers'); |
|
78 | |||
79 | 1 | $generator->keepDirectory('Services'); |
|
80 | 1 | }); |
|
81 | |||
82 | 1 | $generator->keepDirectory('config'); |
|
83 | |||
84 | 1 | $this->generateLang($generator, $properties, function ($generator) use ($properties) { |
|
85 | 1 | $generator->gitKeepFile(); |
|
86 | 1 | }); |
|
87 | |||
88 | 1 | $generator->keepDirectory('views'); |
|
89 | |||
90 | 1 | $generator->phpBlankFile('helpers.php'); |
|
91 | 1 | $generator->phpBlankFile('routes.php'); |
|
92 | |||
93 | 1 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
|
94 | 1 | 'namespace' => new Constant('__NAMESPACE__'), |
|
95 | 'directories' => [ |
||
96 | 'classes', |
||
97 | ], |
||
98 | 'files' => [ |
||
99 | 'helpers.php', |
||
100 | ], |
||
101 | 'paths' => [ |
||
102 | 'config' => 'config', |
||
103 | 'lang' => 'lang', |
||
104 | 'views' => 'views', |
||
105 | ], |
||
106 | 'providers' => [ |
||
107 | 1 | new ClassName('Providers\AddonServiceProvider'), |
|
108 | 1 | new ClassName('Providers\RouteServiceProvider'), |
|
109 | ], |
||
110 | 'http' => [ |
||
111 | 'middlewares' => [ |
||
112 | ], |
||
113 | 'route_middlewares' => [ |
||
114 | ], |
||
115 | ], |
||
116 | 'routes' => [ |
||
117 | 1 | 'domain' => new Constant("env('APP_ADDON_DOMAIN')"), |
|
118 | 1 | 'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"), |
|
119 | 'middleware' => [], |
||
120 | 'files' => [ |
||
121 | 'routes.php' |
||
122 | ], |
||
123 | ], |
||
124 | 1 | ], $this->DEFAULTS); |
|
125 | 1 | } |
|
126 | |||
127 | protected function generateAsset(FileGenerator $generator, array $properties) |
||
128 | { |
||
129 | $generator->directory('assets', function ($generator) use ($properties) { |
||
130 | }); |
||
131 | |||
132 | $generator->file('gulpfile.js')->template('gulpfile.js', $properties); |
||
133 | |||
134 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
||
135 | 'paths' => [ |
||
136 | 'assets' => 'assets', |
||
137 | ], |
||
138 | ]); |
||
139 | } |
||
140 | |||
141 | protected function generateLibrary(FileGenerator $generator, array $properties) |
||
142 | { |
||
143 | 1 | $generator->directory('classes', function ($generator) use ($properties) { |
|
144 | 1 | $migration_class = $properties['addon_class'].'_1_0'; |
|
145 | |||
146 | 1 | $generator->directory('Providers') |
|
147 | 1 | ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties); |
|
148 | 1 | $generator->directory('Providers') |
|
149 | 1 | ->file('DatabaseServiceProvider.php')->template('DatabaseServiceProvider.php', array_merge($properties, ['migration_class_name' => $migration_class])); |
|
150 | |||
151 | 1 | $generator->keepDirectory('Commands'); |
|
152 | |||
153 | 1 | $generator->directory('Migrations') |
|
154 | 1 | ->file($migration_class.'.php')->template('Migration.php', array_merge($properties, ['class_name' => $migration_class])); |
|
155 | 1 | $generator->keepDirectory('Seeds'); |
|
156 | |||
157 | 1 | $generator->keepDirectory('Services'); |
|
158 | 1 | }); |
|
159 | |||
160 | 1 | $generator->keepDirectory('config'); |
|
161 | |||
162 | 1 | $this->generateLang($generator, $properties, function ($generator) use ($properties) { |
|
163 | 1 | $generator->phpConfigFile('messages.php', []); |
|
164 | 1 | }); |
|
165 | |||
166 | 1 | $generator->directory('tests', function ($generator) use ($properties) { |
|
167 | 1 | $generator->file('TestCase.php')->template('TestCase.php', $properties); |
|
168 | 1 | }); |
|
169 | |||
170 | 1 | $generator->phpBlankFile('helpers.php'); |
|
171 | |||
172 | 1 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
|
173 | 1 | 'namespace' => new Constant('__NAMESPACE__'), |
|
174 | 'directories' => [ |
||
175 | 'classes', |
||
176 | ], |
||
177 | 'files' => [ |
||
178 | 'helpers.php', |
||
179 | ], |
||
180 | 'paths' => [ |
||
181 | 'config' => 'config', |
||
182 | 'lang' => 'lang', |
||
183 | 'tests' => 'tests', |
||
184 | ], |
||
185 | 'providers' => [ |
||
186 | 1 | new ClassName('Providers\AddonServiceProvider'), |
|
187 | 1 | new ClassName('Providers\DatabaseServiceProvider'), |
|
188 | ], |
||
189 | 1 | ], $this->DEFAULTS); |
|
190 | 1 | } |
|
191 | |||
192 | protected function generateApi(FileGenerator $generator, array $properties) |
||
193 | { |
||
194 | 1 | $generator->directory('classes', function ($generator) use ($properties) { |
|
195 | 1 | $generator->directory('Providers') |
|
196 | 1 | ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties); |
|
197 | 1 | $generator->directory('Providers') |
|
198 | 1 | ->file('RouteServiceProvider.php')->template('RouteServiceProvider.php', $properties); |
|
199 | |||
200 | 1 | $generator->keepDirectory('Commands'); |
|
201 | |||
202 | 1 | $generator->directory('Controllers') |
|
203 | 1 | ->file('Controller.php')->template('Controller.php', $properties); |
|
204 | 1 | $generator->keepDirectory('Middleware'); |
|
205 | |||
206 | 1 | $generator->keepDirectory('Services'); |
|
207 | 1 | }); |
|
208 | |||
209 | 1 | $generator->keepDirectory('config'); |
|
210 | |||
211 | 1 | $this->generateLang($generator, $properties, function ($generator) use ($properties) { |
|
212 | 1 | $generator->phpConfigFile('messages.php', []); |
|
213 | 1 | $generator->phpConfigFile('vocabulary.php', []); |
|
214 | 1 | $generator->phpConfigFile('methods.php', []); |
|
215 | 1 | }); |
|
216 | |||
217 | 1 | $generator->directory('specs')->phpConfigFile('methods.php', []); |
|
218 | |||
219 | 1 | $generator->directory('tests', function ($generator) use ($properties) { |
|
220 | 1 | $generator->file('TestCase.php')->template('TestCase.php', $properties); |
|
221 | 1 | }); |
|
222 | |||
223 | 1 | $generator->phpBlankFile('helpers.php'); |
|
224 | 1 | $generator->file('routes.php')->template('routes.php', $properties); |
|
225 | |||
226 | 1 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
|
227 | 1 | 'namespace' => new Constant('__NAMESPACE__'), |
|
228 | 'directories' => [ |
||
229 | 'classes', |
||
230 | ], |
||
231 | 'files' => [ |
||
232 | 'helpers.php', |
||
233 | ], |
||
234 | 'paths' => [ |
||
235 | 'config' => 'config', |
||
236 | 'lang' => 'lang', |
||
237 | 'specs' => 'specs', |
||
238 | 'tests' => 'tests', |
||
239 | ], |
||
240 | 'providers' => [ |
||
241 | 1 | new ClassName('Providers\AddonServiceProvider'), |
|
242 | 1 | new ClassName('Providers\RouteServiceProvider'), |
|
243 | ], |
||
244 | 'http' => [ |
||
245 | 'middlewares' => [ |
||
246 | ], |
||
247 | 'route_middlewares' => [ |
||
248 | ], |
||
249 | ], |
||
250 | 'routes' => [ |
||
251 | 1 | 'domain' => new Constant("env('APP_ADDON_DOMAIN')"), |
|
252 | 1 | 'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"), |
|
253 | 'middleware' => ['api'], |
||
254 | 'files' => [ |
||
255 | 'routes.php' |
||
256 | ], |
||
257 | ], |
||
258 | 1 | ], $this->DEFAULTS); |
|
259 | 1 | } |
|
260 | |||
261 | protected function generateUi(FileGenerator $generator, array $properties) |
||
262 | { |
||
263 | 3 | View Code Duplication | $generator->directory('classes', function ($generator) use ($properties) { |
264 | 3 | $migration_class = $properties['addon_class'].'_1_0'; |
|
265 | |||
266 | 3 | $generator->templateDirectory('Controllers', $properties); |
|
267 | 3 | $generator->keepDirectory('Middleware'); |
|
268 | |||
269 | 3 | $generator->templateDirectory('Providers', array_merge($properties, ['migration_class_name' => $migration_class])); |
|
270 | |||
271 | 3 | $generator->keepDirectory('Services'); |
|
272 | 3 | }); |
|
273 | |||
274 | 3 | $generator->keepDirectory('config'); |
|
275 | |||
276 | 3 | $generator->keepDirectory('assets'); |
|
277 | |||
278 | 3 | $this->generateLang($generator, $properties, function ($generator) use ($properties) { |
|
279 | 3 | $generator->phpConfigFile('messages.php', []); |
|
280 | 3 | $generator->phpConfigFile('vocabulary.php', []); |
|
281 | 3 | $generator->phpConfigFile('forms.php', []); |
|
282 | 3 | }); |
|
283 | |||
284 | 3 | $generator->directory('specs')->phpConfigFile('forms.php', []); |
|
285 | |||
286 | 3 | $generator->templateDirectory('views', $properties); |
|
287 | |||
288 | 3 | $generator->templateDirectory('tests', $properties); |
|
289 | |||
290 | 3 | $generator->phpBlankFile('helpers.php'); |
|
291 | 3 | $generator->templateFile('routes.php', $properties); |
|
292 | |||
293 | 3 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
|
294 | 3 | 'namespace' => new Constant('__NAMESPACE__'), |
|
295 | 'directories' => [ |
||
296 | 'classes', |
||
297 | ], |
||
298 | 'files' => [ |
||
299 | 'helpers.php', |
||
300 | ], |
||
301 | 'paths' => [ |
||
302 | 'config' => 'config', |
||
303 | 'assets' => 'assets', |
||
304 | 'lang' => 'lang', |
||
305 | 'specs' => 'specs', |
||
306 | 'views' => 'views', |
||
307 | 'tests' => 'tests', |
||
308 | ], |
||
309 | 'providers' => [ |
||
310 | 3 | new ClassName('Providers\AddonServiceProvider'), |
|
311 | 3 | new ClassName('Providers\RouteServiceProvider'), |
|
312 | ], |
||
313 | 'http' => [ |
||
314 | 'middlewares' => [ |
||
315 | ], |
||
316 | 'route_middlewares' => [ |
||
317 | ], |
||
318 | ], |
||
319 | 'routes' => [ |
||
320 | 3 | 'domain' => new Constant("env('APP_ADDON_DOMAIN')"), |
|
321 | 3 | 'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"), |
|
322 | 3 | 'namespace' => new Constant("__NAMESPACE__.'\\Controllers'"), |
|
323 | 'middleware' => ['web'], |
||
324 | 'files' => [ |
||
325 | 'routes.php' |
||
326 | ], |
||
327 | ], |
||
328 | 3 | ], $this->DEFAULTS); |
|
329 | 3 | } |
|
330 | |||
331 | protected function generateUiSample(FileGenerator $generator, array $properties) |
||
332 | { |
||
333 | 1 | View Code Duplication | $generator->directory('classes', function ($generator) use ($properties) { |
334 | 1 | $migration_class = $properties['addon_class'].'_1_0'; |
|
335 | |||
336 | 1 | $generator->templateDirectory('Controllers', $properties); |
|
337 | 1 | $generator->keepDirectory('Middleware'); |
|
338 | |||
339 | 1 | $generator->templateDirectory('Providers', array_merge($properties, ['migration_class_name' => $migration_class])); |
|
340 | |||
341 | 1 | $generator->keepDirectory('Services'); |
|
342 | 1 | }); |
|
343 | |||
344 | 1 | $generator->keepDirectory('config'); |
|
345 | |||
346 | 1 | $generator->keepDirectory('assets'); |
|
347 | |||
348 | 1 | $this->generateLang($generator, $properties, function ($generator) use ($properties) { |
|
349 | 1 | $generator->phpConfigFile('messages.php', []); |
|
350 | 1 | $generator->phpConfigFile('vocabulary.php', []); |
|
351 | 1 | $generator->phpConfigFile('forms.php', []); |
|
352 | 1 | }); |
|
353 | 1 | $generator->directory('lang/en')->file('messages.php')->template('lang/en-messages.php', $properties); |
|
354 | 1 | if (in_array('ja', $properties['languages'])) { |
|
355 | $generator->directory('lang/ja')->file('messages.php')->template('lang/ja-messages.php', $properties); |
||
356 | } |
||
357 | |||
358 | 1 | $generator->directory('specs')->phpConfigFile('forms.php', []); |
|
359 | |||
360 | 1 | $generator->templateDirectory('views', $properties); |
|
361 | |||
362 | 1 | $generator->templateDirectory('tests', $properties); |
|
363 | |||
364 | 1 | $generator->phpBlankFile('helpers.php'); |
|
365 | 1 | $generator->templateFile('routes.php', $properties); |
|
366 | |||
367 | 1 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
|
368 | 1 | 'namespace' => new Constant('__NAMESPACE__'), |
|
369 | 'directories' => [ |
||
370 | 'classes', |
||
371 | ], |
||
372 | 'files' => [ |
||
373 | 'helpers.php', |
||
374 | ], |
||
375 | 'paths' => [ |
||
376 | 'config' => 'config', |
||
377 | 'assets' => 'assets', |
||
378 | 'lang' => 'lang', |
||
379 | 'specs' => 'specs', |
||
380 | 'views' => 'views', |
||
381 | 'tests' => 'tests', |
||
382 | ], |
||
383 | 'providers' => [ |
||
384 | 1 | new ClassName('Providers\AddonServiceProvider'), |
|
385 | 1 | new ClassName('Providers\RouteServiceProvider'), |
|
386 | ], |
||
387 | 'http' => [ |
||
388 | 'middlewares' => [ |
||
389 | ], |
||
390 | 'route_middlewares' => [ |
||
391 | ], |
||
392 | ], |
||
393 | 'routes' => [ |
||
394 | 1 | 'domain' => new Constant("env('APP_ADDON_DOMAIN')"), |
|
395 | 1 | 'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"), |
|
396 | 1 | 'namespace' => new Constant("__NAMESPACE__.'\\Controllers'"), |
|
397 | 'middleware' => ['web'], |
||
398 | 'files' => [ |
||
399 | 'routes.php' |
||
400 | ], |
||
401 | ], |
||
402 | 1 | ], $this->DEFAULTS); |
|
403 | 1 | } |
|
404 | |||
405 | protected function generateDebug(FileGenerator $generator, array $properties) |
||
406 | { |
||
407 | 1 | $generator->directory('classes', function ($generator) use ($properties) { |
|
408 | 1 | $generator->directory('Providers') |
|
409 | 1 | ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties); |
|
410 | 1 | $generator->directory('Providers') |
|
411 | 1 | ->file('RouteServiceProvider.php')->template('RouteServiceProvider.php', $properties); |
|
412 | |||
413 | 1 | $generator->keepDirectory('Commands'); |
|
414 | |||
415 | 1 | $generator->directory('Controllers') |
|
416 | 1 | ->file('Controller.php')->template('Controller.php', $properties); |
|
417 | 1 | $generator->directory('Controllers') |
|
418 | 1 | ->file('DebugController.php')->template('DebugController.php', $properties); |
|
419 | 1 | $generator->keepDirectory('Middleware'); |
|
420 | |||
421 | 1 | $generator->keepDirectory('Services'); |
|
422 | 1 | }); |
|
423 | |||
424 | 1 | $generator->keepDirectory('config'); |
|
425 | |||
426 | 1 | $this->generateLang($generator, $properties, function ($generator) use ($properties) { |
|
427 | 1 | $generator->phpConfigFile('messages.php', []); |
|
428 | 1 | $generator->phpConfigFile('vocabulary.php', []); |
|
429 | 1 | $generator->phpConfigFile('forms.php', []); |
|
430 | 1 | $generator->phpConfigFile('methods.php', []); |
|
431 | 1 | }); |
|
432 | |||
433 | 1 | $generator->directory('specs')->phpConfigFile('forms.php', []); |
|
434 | 1 | $generator->directory('specs')->phpConfigFile('methods.php', []); |
|
435 | |||
436 | 1 | $generator->directory('views') |
|
437 | 1 | ->file('index.blade.php')->template('index.blade.php', $properties); |
|
438 | 1 | $generator->directory('views') |
|
439 | 1 | ->file('layout.blade.php')->template('layout.blade.php', $properties); |
|
440 | |||
441 | 1 | $generator->phpBlankFile('helpers.php'); |
|
442 | 1 | $generator->file('routes.php')->template('routes.php', $properties); |
|
443 | |||
444 | 1 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
|
445 | 1 | 'namespace' => new Constant('__NAMESPACE__'), |
|
446 | 'directories' => [ |
||
447 | 'classes', |
||
448 | ], |
||
449 | 'files' => [ |
||
450 | 'helpers.php', |
||
451 | ], |
||
452 | 'paths' => [ |
||
453 | 'config' => 'config', |
||
454 | 'lang' => 'lang', |
||
455 | 'specs' => 'specs', |
||
456 | 'views' => 'views', |
||
457 | 'tests' => 'tests', |
||
458 | ], |
||
459 | 'providers' => [ |
||
460 | 1 | new ClassName('Providers\AddonServiceProvider'), |
|
461 | 1 | new ClassName('Providers\RouteServiceProvider'), |
|
462 | ], |
||
463 | 'http' => [ |
||
464 | 'middlewares' => [ |
||
465 | ], |
||
466 | 'route_middlewares' => [ |
||
467 | ], |
||
468 | ], |
||
469 | 'routes' => [ |
||
470 | 1 | 'domain' => new Constant("env('APP_ADDON_DOMAIN')"), |
|
471 | 1 | 'prefix' => new Constant("env('APP_ADDON_PATH', 'debug')"), |
|
472 | 1 | 'namespace' => new Constant("__NAMESPACE__.'\\Controllers'"), |
|
473 | 'middleware' => ['web'], |
||
474 | 'files' => [ |
||
475 | 'routes.php' |
||
476 | ], |
||
477 | ], |
||
478 | 1 | ], $this->DEFAULTS); |
|
479 | 1 | } |
|
480 | |||
481 | protected function generateGenerator(FileGenerator $generator, array $properties) |
||
482 | { |
||
483 | 1 | $generator->directory('classes', function ($generator) use ($properties) { |
|
484 | 1 | $generator->directory('Providers') |
|
485 | 1 | ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties); |
|
486 | 1 | }); |
|
487 | |||
488 | 1 | $generator->directory('config', function ($generator) use ($properties) { |
|
489 | 1 | $generator->file('commands.php')->template('commands.php', $properties); |
|
490 | 1 | }); |
|
491 | |||
492 | 1 | $generator->templateDirectory('stubs'); |
|
493 | |||
494 | 1 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
|
495 | 1 | 'namespace' => new Constant('__NAMESPACE__'), |
|
496 | 'directories' => [ |
||
497 | 'classes', |
||
498 | ], |
||
499 | 'paths' => [ |
||
500 | 'config' => 'config', |
||
501 | ], |
||
502 | 'providers' => [ |
||
503 | 1 | new ClassName('Providers\AddonServiceProvider'), |
|
504 | ], |
||
505 | ]); |
||
506 | 1 | } |
|
507 | |||
508 | protected function generateLaravel5(FileGenerator $generator, array $properties) |
||
509 | { |
||
510 | 1 | $generator->directory('classes', function ($generator) use ($properties) { |
|
511 | 1 | $generator->directory('Providers') |
|
512 | 1 | ->file('AddonServiceProvider.php')->template('AddonServiceProvider.php', $properties); |
|
513 | 1 | $generator->directory('Providers') |
|
514 | 1 | ->file('RouteServiceProvider.php')->template('RouteServiceProvider.php', $properties); |
|
515 | |||
516 | 1 | $generator->keepDirectory('Console/Commands'); |
|
517 | |||
518 | 1 | $generator->directory('Http/Controllers') |
|
519 | 1 | ->file('Controller.php')->template('Controller.php', $properties); |
|
520 | 1 | $generator->keepDirectory('Http/Middleware'); |
|
521 | |||
522 | 1 | $generator->keepDirectory('Services'); |
|
523 | 1 | }); |
|
524 | |||
525 | 1 | $generator->keepDirectory('config'); |
|
526 | |||
527 | 1 | $generator->directory('database', function ($generator) use ($properties) { |
|
528 | 1 | $generator->keepDirectory('factories'); |
|
529 | 1 | $generator->keepDirectory('migrations'); |
|
530 | 1 | $generator->keepDirectory('seeds'); |
|
531 | 1 | }); |
|
532 | |||
533 | 1 | $generator->directory('resources', function ($generator) use ($properties) { |
|
534 | 1 | $generator->keepDirectory('assets'); |
|
535 | |||
536 | 1 | $this->generateLang($generator, $properties, function ($generator) use ($properties) { |
|
537 | 1 | $generator->phpConfigFile('messages.php', []); |
|
538 | 1 | }); |
|
539 | |||
540 | 1 | $generator->keepDirectory('views'); |
|
541 | 1 | }); |
|
542 | |||
543 | 1 | $generator->directory('routes', function ($generator) use ($properties) { |
|
544 | 1 | $generator->file('web.php')->template('routes.php', $properties); |
|
545 | 1 | }); |
|
546 | |||
547 | 1 | $generator->directory('tests', function ($generator) use ($properties) { |
|
548 | 1 | $generator->file('TestCase.php')->template('TestCase.php', $properties); |
|
549 | 1 | }); |
|
550 | |||
551 | 1 | $generator->phpBlankFile('helpers.php'); |
|
552 | |||
553 | 1 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
|
554 | 1 | 'namespace' => new Constant('__NAMESPACE__'), |
|
555 | 'directories' => [ |
||
556 | 'classes', |
||
557 | ], |
||
558 | 'files' => [ |
||
559 | 'helpers.php', |
||
560 | ], |
||
561 | 'paths' => [ |
||
562 | 'config' => 'config', |
||
563 | 'assets' => 'resources/assets', |
||
564 | 'lang' => 'resources/lang', |
||
565 | 'views' => 'resources/views', |
||
566 | ], |
||
567 | 'providers' => [ |
||
568 | 1 | new ClassName('Providers\AddonServiceProvider'), |
|
569 | 1 | new ClassName('Providers\RouteServiceProvider'), |
|
570 | ], |
||
571 | 'http' => [ |
||
572 | 'middlewares' => [ |
||
573 | ], |
||
574 | 'route_middlewares' => [ |
||
575 | ], |
||
576 | ], |
||
577 | 'routes' => [ |
||
578 | 1 | 'domain' => new Constant("env('APP_ADDON_DOMAIN')"), |
|
579 | 1 | 'prefix' => new Constant("env('APP_ADDON_PATH', '".$properties['addon_name']."')"), |
|
580 | 1 | 'namespace' => new Constant("__NAMESPACE__.'\\Http\\Controllers'"), |
|
581 | 'middleware' => ['web'], |
||
582 | 'files' => [ |
||
583 | 'routes/web.php' |
||
584 | ], |
||
585 | ], |
||
586 | 1 | ], $this->DEFAULTS); |
|
587 | 1 | } |
|
588 | |||
589 | protected function generateLaravel5Auth(FileGenerator $generator, array $properties) |
||
590 | { |
||
591 | 1 | $generator->directory('classes', function ($generator) use ($properties) { |
|
592 | 1 | $generator->templateDirectory('Migrations', $properties); |
|
593 | |||
594 | 1 | $generator->templateDirectory('Controllers', $properties); |
|
595 | |||
596 | 1 | $generator->templateDirectory('Middleware', $properties); |
|
597 | |||
598 | 1 | $generator->templateDirectory('Providers', $properties); |
|
599 | |||
600 | 1 | $generator->keepDirectory('Services'); |
|
601 | |||
602 | 1 | $generator->keepDirectory('Seeds'); |
|
603 | |||
604 | 1 | $generator->templateFile('User.php', $properties); |
|
605 | 1 | }); |
|
606 | |||
607 | 1 | $generator->keepDirectory('config'); |
|
608 | |||
609 | 1 | $generator->sourceDirectory('lang'); |
|
610 | 1 | $this->generateLang($generator, $properties, function ($generator) use ($properties) { |
|
611 | 1 | $generator->phpConfigFile('messages.php', []); |
|
612 | 1 | $generator->phpConfigFile('vocabulary.php', []); |
|
613 | 1 | $generator->phpConfigFile('forms.php', []); |
|
614 | 1 | }); |
|
615 | |||
616 | 1 | $generator->templateDirectory('views', $properties); |
|
617 | |||
618 | 1 | $generator->templateDirectory('routes', $properties); |
|
619 | |||
620 | 1 | $generator->templateDirectory('tests', $properties); |
|
621 | |||
622 | 1 | $generator->phpBlankFile('helpers.php'); |
|
623 | |||
624 | 1 | $this->generateAddonConfig($generator, $properties['namespace'], [ |
|
625 | 1 | 'namespace' => new Constant('__NAMESPACE__'), |
|
626 | 'directories' => [ |
||
627 | 'classes', |
||
628 | ], |
||
629 | 'files' => [ |
||
630 | 'helpers.php', |
||
631 | ], |
||
632 | 'paths' => [ |
||
633 | 'config' => 'config', |
||
634 | 'assets' => 'assets', |
||
635 | 'lang' => 'lang', |
||
636 | 'views' => 'views', |
||
637 | 'tests' => 'tests', |
||
638 | ], |
||
639 | 'providers' => [ |
||
640 | 1 | new ClassName('Providers\AddonServiceProvider'), |
|
641 | 1 | new ClassName('Providers\DatabaseServiceProvider'), |
|
642 | 1 | new ClassName('Providers\RouteServiceProvider'), |
|
643 | ], |
||
644 | 'http' => [ |
||
645 | 'middlewares' => [ |
||
646 | ], |
||
647 | 'route_middlewares' => [ |
||
648 | 1 | 'auth' => new ClassName('Middleware\Authenticate'), |
|
649 | 1 | 'auth.basic' => new ClassName('Illuminate\Auth\Middleware\AuthenticateWithBasicAuth'), |
|
650 | 1 | 'guest' => new ClassName('Middleware\RedirectIfAuthenticated'), |
|
651 | ], |
||
652 | ], |
||
653 | 'routes' => [ |
||
654 | 1 | 'domain' => new Constant("env('APP_ADDON_DOMAIN')"), |
|
655 | 1 | 'prefix' => new Constant("env('APP_ADDON_PATH', '/')"), |
|
656 | 1 | 'namespace' => new Constant("__NAMESPACE__.'\\Controllers'"), |
|
657 | 'middleware' => ['web'], |
||
658 | 'files' => [ |
||
659 | 'routes/web.php' |
||
660 | ], |
||
661 | 1 | 'landing' => '/', |
|
662 | 1 | 'home' => '/home', |
|
663 | 1 | 'login' => '/login', |
|
664 | ], |
||
665 | 1 | ], $this->DEFAULTS); |
|
666 | 1 | } |
|
667 | |||
668 | protected function generateLang(FileGenerator $generator, array $properties, callable $callable) |
||
676 | |||
677 | 15 | protected function generateAddonConfig(FileGenerator $generator, $namespace, array $data, array $defaults = null) |
|
687 | } |
||
688 |
In PHP it is possible to write to properties without declaring them. For example, the following is perfectly valid PHP code:
Generally, it is a good practice to explictly declare properties to avoid accidental typos and provide IDE auto-completion: