24
24
use Toolkit \PFlag \SFlags ;
25
25
use Toolkit \Stdlib \Helper \Assert ;
26
26
use Toolkit \Stdlib \Helper \DataHelper ;
27
+ use Toolkit \Stdlib \Str ;
28
+ use function array_shift ;
27
29
use function array_unshift ;
28
30
use function class_exists ;
29
31
use function implode ;
@@ -56,170 +58,6 @@ public function __construct(array $config = [], Input $input = null, Output $out
56
58
parent ::__construct ($ config , $ input , $ output );
57
59
}
58
60
59
- /****************************************************************************
60
- * register console controller/command
61
- ****************************************************************************/
62
-
63
- /**
64
- * @param string $name
65
- * @param ControllerInterface|string|null $class
66
- * @param array $config
67
- *
68
- * @return $this
69
- */
70
- public function controller (string $ name , ControllerInterface |string $ class = null , array $ config = []): static
71
- {
72
- $ this ->logf (Console::VERB_CRAZY , 'register group controller: %s ' , $ name );
73
- $ this ->router ->addGroup ($ name , $ class , $ config );
74
-
75
- return $ this ;
76
- }
77
-
78
- /**
79
- * Add group/controller
80
- *
81
- * @param string|class-string $name
82
- * @param string|ControllerInterface|null $class The controller class
83
- * @param array $config
84
- *
85
- * @return static
86
- * @see controller()
87
- */
88
- public function addGroup (string $ name , ControllerInterface |string $ class = null , array $ config = []): static
89
- {
90
- return $ this ->controller ($ name , $ class , $ config );
91
- }
92
-
93
- /**
94
- * @param string $name
95
- * @param string|ControllerInterface|null $class The controller class
96
- * @param array $config
97
- *
98
- * @return $this
99
- * @see controller()
100
- */
101
- public function addController (string $ name , ControllerInterface |string $ class = null , array $ config = []): static
102
- {
103
- return $ this ->controller ($ name , $ class , $ config );
104
- }
105
-
106
- /**
107
- * @param array $controllers
108
- */
109
- public function controllers (array $ controllers ): void
110
- {
111
- $ this ->addControllers ($ controllers );
112
- }
113
-
114
- /**
115
- * @param array $controllers
116
- */
117
- public function addControllers (array $ controllers ): void
118
- {
119
- $ this ->router ->addControllers ($ controllers );
120
- }
121
-
122
- /**
123
- * @param string $name
124
- * @param class-string|CommandInterface|null|Closure(FlagsParser, Output):void $handler
125
- * @param array{desc: string, aliases: array, options: array, arguments: array} $config config the command.
126
- *
127
- * @return Application
128
- */
129
- public function command (string $ name , string |Closure |CommandInterface $ handler = null , array $ config = []): static
130
- {
131
- $ this ->logf (Console::VERB_CRAZY , 'register alone command: %s ' , $ name );
132
- $ this ->router ->addCommand ($ name , $ handler , $ config );
133
-
134
- return $ this ;
135
- }
136
-
137
- /**
138
- * add command
139
- *
140
- * @param string $name
141
- * @param class-string|CommandInterface|null|Closure(FlagsParser, Output):void $handler
142
- * @param array{desc: string, aliases: array, options: array, arguments: array} $config config the command.
143
- *
144
- * @return Application
145
- * @see command()
146
- */
147
- public function addCommand (string $ name , string |Closure |CommandInterface $ handler = null , array $ config = []): static
148
- {
149
- return $ this ->command ($ name , $ handler , $ config );
150
- }
151
-
152
- /**
153
- * @param array{string, mixed} $commands
154
- */
155
- public function addCommands (array $ commands ): void
156
- {
157
- $ this ->router ->addCommands ($ commands );
158
- }
159
-
160
- /**
161
- * @param array{string, mixed} $commands
162
- */
163
- public function commands (array $ commands ): void
164
- {
165
- $ this ->addCommands ($ commands );
166
- }
167
-
168
- /**
169
- * auto register commands from a dir.
170
- *
171
- * ```php
172
- * $app->registerCommands('SwagPhp\Command', dirname(__DIR__) . '/src/Command');
173
- * ```
174
- *
175
- * @param string $namespace
176
- * @param string $basePath
177
- *
178
- * @return $this
179
- */
180
- public function registerCommands (string $ namespace , string $ basePath ): static
181
- {
182
- $ this ->debugf ('register commands from the namespace: %s ' , $ namespace );
183
-
184
- $ length = strlen ($ basePath ) + 1 ;
185
- // $iterator = Helper::directoryIterator($basePath, $this->getFileFilter());
186
- $ iter = Dir::getIterator ($ basePath , Dir::getPhpFileFilter ());
187
-
188
- foreach ($ iter as $ file ) {
189
- $ subPath = substr ($ file ->getPathName (), $ length , -4 );
190
- $ fullClass = $ namespace . '\\' . str_replace ('/ ' , '\\' , $ subPath );
191
- $ this ->addCommand ($ fullClass );
192
- }
193
-
194
- return $ this ;
195
- }
196
-
197
- /**
198
- * auto register controllers from a dir.
199
- *
200
- * @param string $namespace
201
- * @param string $basePath
202
- *
203
- * @return $this
204
- * @throws InvalidArgumentException
205
- */
206
- public function registerGroups (string $ namespace , string $ basePath ): self
207
- {
208
- $ this ->debugf ('register groups from the namespace: %s ' , $ namespace );
209
-
210
- $ length = strlen ($ basePath ) + 1 ;
211
- // $iterator = Helper::directoryIterator($basePath, $this->getFileFilter());
212
- $ iter = Dir::getIterator ($ basePath , Dir::getPhpFileFilter ());
213
-
214
- foreach ($ iter as $ file ) {
215
- $ subPath = substr ($ file ->getPathName (), $ length , -4 );
216
- $ fullClass = $ namespace . '\\' . str_replace ('/ ' , '\\' , $ subPath );
217
- $ this ->addController ($ fullClass );
218
- }
219
-
220
- return $ this ;
221
- }
222
-
223
61
/****************************************************************************
224
62
* Dispatch and run console controller/command
225
63
****************************************************************************/
@@ -238,11 +76,15 @@ public function dispatch(string $name, array $args = []): mixed
238
76
}
239
77
240
78
$ cmdId = $ name ;
241
- $ this ->debugf ('app - begin dispatch the input command: %s , args: %s ' , $ name , DataHelper::toString ($ args ));
79
+ $ this ->debugf ('app - begin dispatch the input command: "%s" , args: %s ' , $ name , DataHelper::toString ($ args ));
242
80
243
- // format is: `group action`
81
+ // format is: `group action` or `top sub sub2`
244
82
if (strpos ($ name , ' ' ) > 0 ) {
245
- $ cmdId = str_replace (' ' , $ this ->delimiter , $ name );
83
+ $ names = Str::splitTrimmed ($ name , ' ' );
84
+ $ cmdId = array_shift ($ names );
85
+
86
+ // prepend elements to the beginning of $args
87
+ array_unshift ($ args , ...$ names );
246
88
}
247
89
248
90
// match handler by input name
@@ -439,4 +281,167 @@ protected function createController(array $info): Controller
439
281
$ this ->groupObjects [$ group ] = $ handler ;
440
282
return $ handler ;
441
283
}
284
+
285
+ /****************************************************************************
286
+ * register console controller/command
287
+ ****************************************************************************/
288
+
289
+ /**
290
+ * @param string $name
291
+ * @param ControllerInterface|string|null $class
292
+ * @param array $config
293
+ *
294
+ * @return $this
295
+ */
296
+ public function controller (string $ name , ControllerInterface |string $ class = null , array $ config = []): static
297
+ {
298
+ $ this ->logf (Console::VERB_CRAZY , 'register group controller: %s ' , $ name );
299
+ $ this ->router ->addGroup ($ name , $ class , $ config );
300
+
301
+ return $ this ;
302
+ }
303
+
304
+ /**
305
+ * Add group/controller
306
+ *
307
+ * @param string|class-string $name
308
+ * @param string|ControllerInterface|null $class The controller class
309
+ * @param array $config
310
+ *
311
+ * @return static
312
+ * @see controller()
313
+ */
314
+ public function addGroup (string $ name , ControllerInterface |string $ class = null , array $ config = []): static
315
+ {
316
+ return $ this ->controller ($ name , $ class , $ config );
317
+ }
318
+
319
+ /**
320
+ * @param string $name
321
+ * @param string|ControllerInterface|null $class The controller class
322
+ * @param array $config
323
+ *
324
+ * @return $this
325
+ * @see controller()
326
+ */
327
+ public function addController (string $ name , ControllerInterface |string $ class = null , array $ config = []): static
328
+ {
329
+ return $ this ->controller ($ name , $ class , $ config );
330
+ }
331
+
332
+ /**
333
+ * @param array $controllers
334
+ */
335
+ public function controllers (array $ controllers ): void
336
+ {
337
+ $ this ->addControllers ($ controllers );
338
+ }
339
+
340
+ /**
341
+ * @param array $controllers
342
+ */
343
+ public function addControllers (array $ controllers ): void
344
+ {
345
+ $ this ->router ->addControllers ($ controllers );
346
+ }
347
+
348
+ /**
349
+ * @param string $name
350
+ * @param class-string|CommandInterface|null|Closure(FlagsParser, Output):void $handler
351
+ * @param array{desc: string, aliases: array, options: array, arguments: array} $config config the command.
352
+ *
353
+ * @return Application
354
+ */
355
+ public function command (string $ name , string |Closure |CommandInterface $ handler = null , array $ config = []): static
356
+ {
357
+ $ this ->logf (Console::VERB_CRAZY , 'register alone command: %s ' , $ name );
358
+ $ this ->router ->addCommand ($ name , $ handler , $ config );
359
+
360
+ return $ this ;
361
+ }
362
+
363
+ /**
364
+ * add command
365
+ *
366
+ * @param string $name
367
+ * @param class-string|CommandInterface|null|Closure(FlagsParser, Output):void $handler
368
+ * @param array{desc: string, aliases: array, options: array, arguments: array} $config config the command.
369
+ *
370
+ * @return Application
371
+ * @see command()
372
+ */
373
+ public function addCommand (string $ name , string |Closure |CommandInterface $ handler = null , array $ config = []): static
374
+ {
375
+ return $ this ->command ($ name , $ handler , $ config );
376
+ }
377
+
378
+ /**
379
+ * @param array{string, mixed} $commands
380
+ */
381
+ public function addCommands (array $ commands ): void
382
+ {
383
+ $ this ->router ->addCommands ($ commands );
384
+ }
385
+
386
+ /**
387
+ * @param array{string, mixed} $commands
388
+ */
389
+ public function commands (array $ commands ): void
390
+ {
391
+ $ this ->addCommands ($ commands );
392
+ }
393
+
394
+ /**
395
+ * auto register commands from a dir.
396
+ *
397
+ * ```php
398
+ * $app->registerCommands('SwagPhp\Command', dirname(__DIR__) . '/src/Command');
399
+ * ```
400
+ *
401
+ * @param string $namespace
402
+ * @param string $basePath
403
+ *
404
+ * @return $this
405
+ */
406
+ public function registerCommands (string $ namespace , string $ basePath ): static
407
+ {
408
+ $ this ->debugf ('register commands from the namespace: %s ' , $ namespace );
409
+
410
+ $ length = strlen ($ basePath ) + 1 ;
411
+ // $iterator = Helper::directoryIterator($basePath, $this->getFileFilter());
412
+ $ iter = Dir::getIterator ($ basePath , Dir::getPhpFileFilter ());
413
+
414
+ foreach ($ iter as $ file ) {
415
+ $ subPath = substr ($ file ->getPathName (), $ length , -4 );
416
+ $ fullClass = $ namespace . '\\' . str_replace ('/ ' , '\\' , $ subPath );
417
+ $ this ->addCommand ($ fullClass );
418
+ }
419
+
420
+ return $ this ;
421
+ }
422
+
423
+ /**
424
+ * auto register controllers from a dir.
425
+ *
426
+ * @param string $namespace
427
+ * @param string $basePath
428
+ *
429
+ * @return $this
430
+ */
431
+ public function registerGroups (string $ namespace , string $ basePath ): self
432
+ {
433
+ $ this ->debugf ('register groups from the namespace: %s ' , $ namespace );
434
+
435
+ $ length = strlen ($ basePath ) + 1 ;
436
+ // $iterator = Helper::directoryIterator($basePath, $this->getFileFilter());
437
+ $ iter = Dir::getIterator ($ basePath , Dir::getPhpFileFilter ());
438
+
439
+ foreach ($ iter as $ file ) {
440
+ $ subPath = substr ($ file ->getPathName (), $ length , -4 );
441
+ $ fullClass = $ namespace . '\\' . str_replace ('/ ' , '\\' , $ subPath );
442
+ $ this ->addController ($ fullClass );
443
+ }
444
+
445
+ return $ this ;
446
+ }
442
447
}
0 commit comments