17
17
use LaravelRequire \Support \Rules \MatchFilenameRuleContract ;
18
18
use LaravelRequire \Support \RegisteredItemInformation ;
19
19
use LaravelRequire \Support \ClassInformationParser ;
20
+ use LaravelRequire \Support \FacadeClassLoader ;
20
21
21
22
22
23
class RequireCommand extends Command
@@ -26,7 +27,11 @@ class RequireCommand extends Command
26
27
*
27
28
* @var string
28
29
*/
29
- protected $ signature = 'require:package {package} {--register-only} ' ;
30
+ protected $ signature = 'require:package {package} ' .
31
+ '{--d | --dry-run : Simulate installation and registration of a package } ' .
32
+ '{--r | --register-only : register package only, don \'t run `composer require`} ' .
33
+ '{--c | --no-class-loader : don \'t use the smart facade class loader} ' .
34
+ '' ;
30
35
31
36
/**
32
37
* The console command description.
@@ -54,6 +59,7 @@ public function handle()
54
59
{
55
60
$ packageName = $ this ->argument ('package ' );
56
61
$ registerOnly = $ this ->option ('register-only ' );
62
+ $ dryRun = $ this ->option ('dry-run ' );
57
63
58
64
try {
59
65
$ this ->validatePackageName ($ packageName );
@@ -62,7 +68,11 @@ public function handle()
62
68
return ;
63
69
}
64
70
65
- if (!$ registerOnly ) {
71
+ if ($ dryRun ) {
72
+ $ this ->info ('[dry-run] run composer require ' .$ packageName );
73
+ }
74
+
75
+ if (!$ registerOnly && !$ dryRun ) {
66
76
$ composerRequireCommand = $ this ->findComposerBinary () . " require $ packageName " ;
67
77
$ process = new Process ($ composerRequireCommand , base_path (), null , null , null );
68
78
@@ -77,54 +87,93 @@ public function handle()
77
87
});
78
88
}
79
89
80
- $ splist = (array )$ this ->findPackageFilesToRegister ($ packageName );
81
- $ providers = [];
90
+ $ splist = (array )$ this ->findPackageFilesToRegister ($ packageName );
91
+ $ providers = ['None ' ];
92
+ $ facades = ['None ' ];
93
+ $ items = [];
94
+
95
+ foreach ($ splist as $ info ) {
96
+ switch ($ info ->type ) {
97
+ case RegisteredItemInformation::SERVICE_PROVIDER_TYPE :
98
+ $ providers [] = $ info ;
99
+ break ;
100
+ case RegisteredItemInformation::FACADE_TYPE :
101
+ $ facades [] = $ info ;
102
+ break ;
103
+ default :
104
+ //nothing to do
105
+ }
106
+ }
82
107
83
108
//found multiple service providers
84
- if (count ($ splist ) > 1 ) {
85
-
109
+ if (count ($ providers ) == 1 ) {
110
+ $ items [] = $ providers [0 ];
111
+ } else {
86
112
$ selected = $ this ->choice (
87
- "Multiple Service Provider and/or Facade classes were located. \n" .
113
+ " Service Provider classes were located. \n" .
88
114
" Please enter a comma-separated list of item numbers to register. Default: " ,
89
- $ splist , 0 , null , true
115
+ $ providers , 0 , null , ( count ( $ providers ) >= 1 )
90
116
);
91
117
92
118
foreach ($ selected as $ class ) {
93
- foreach ($ splist as $ info ) {
94
- if ($ info ->qualifiedName () == $ class ) {
95
- $ providers [] = $ info ;
119
+ if (strtolower ($ class ) == 'none ' )
120
+ break ;
121
+ foreach ($ providers as $ provider ) {
122
+ if ($ provider ->qualifiedName () == $ class ) {
123
+ $ items [] = $ provider ;
96
124
}
97
125
}
98
126
}
127
+ }
99
128
129
+ if (count ($ facades ) == 1 ) {
130
+ $ items [] = $ facades [0 ];
100
131
} else {
101
- $ providers = $ splist ; //Didn't find more than one service provider/facade
132
+ $ selected = $ this ->choice (
133
+ " Facade classes were located. \n" .
134
+ " Please enter a comma-separated list of item numbers to register. Default: " ,
135
+ $ facades , 0 , null , (count ($ facades ) > 1 )
136
+ );
137
+ foreach ($ selected as $ class ) {
138
+ if (strtolower ($ class ) == 'none ' )
139
+ break ;
140
+ foreach ($ facades as $ facade ) {
141
+ if ($ facade ->qualifiedName () == $ class ) {
142
+ $ items [] = $ facade ;
143
+ }
144
+ }
145
+ }
102
146
}
103
147
104
- foreach ($ providers as $ provider ) {
148
+ foreach ($ items as $ item ) {
105
149
106
- if (!$ provider ->filename ) {
150
+ if (!$ item ->filename ) {
107
151
$ this ->comment (
108
- "The service provider file for " .$ provider ->qualifiedName ()." could not be found. " .
152
+ "The service provider file for " .$ item ->qualifiedName ()." could not be found. " .
109
153
"This package must be registered manually. "
110
154
);
111
155
continue ;
112
156
}
113
157
114
158
try {
115
- $ this ->info ("Registering " .$ provider ->displayName ().': ' .$ provider ->qualifiedName ()."... " );
116
-
117
- if ($ this ->registerPackageItem ($ provider )) {
118
- $ this ->info ('...registered successfully. ' );
119
- } else {
120
- $ this ->comment ('The package and/or service provider did not register or install correctly. ' );
159
+ $ this ->info ("Registering " .$ item ->displayName ().': ' .$ item ->qualifiedName ()."... " );
160
+
161
+ if ($ dryRun ) {
162
+ $ this ->info ('[dry-run] registerPackageItem ' );
163
+ } elseif (!$ dryRun ) {
164
+ if ($ this ->registerPackageItem ($ item )) {
165
+ $ this ->info ('...registered successfully. ' );
166
+ } else {
167
+ $ this ->comment ('The package and/or service provider did not register or install correctly. ' );
168
+ }
121
169
}
122
170
} catch (ServiceProvidersVariableMissingException $ e ) {
123
171
$ this ->comment ($ e ->getMessage ());
124
172
} catch (ServiceProviderAlreadyRegisteredException $ e ) {
125
173
$ this ->comment ($ e ->getMessage ());
126
174
}
127
175
} //end foreach(providers)
176
+ $ this ->info ('Finished. ' );
128
177
}
129
178
130
179
/**
@@ -155,7 +204,7 @@ protected function findPackageFilesToRegister($packageName)
155
204
156
205
foreach ($ files as $ file ) {
157
206
$ spInfo = $ scanner ->scanFile ($ file ->getPathname (), new ServiceProviderRule );
158
- $ fInfo = $ scanner ->scanFile ($ file ->getPathname (), new FacadeRule );
207
+ $ fInfo = $ scanner ->scanFile ($ file ->getPathname (), new FacadeRule ( new FacadeClassLoader ) );
159
208
if ($ fInfo !== false )
160
209
$ result [] = $ fInfo ->type (RegisteredItemInformation::FACADE_TYPE );
161
210
if ($ spInfo !== false )
@@ -213,6 +262,7 @@ protected function registerPackageItem(RegisteredItemInformation $item)
213
262
}
214
263
}
215
264
265
+
216
266
if ($ item ->type == RegisteredItemInformation::FACADE_TYPE ) {
217
267
$ searchLine = "'aliases' => [ " ;
218
268
//some Facades provided by packages are named 'Facade.php', so we will try
@@ -240,4 +290,29 @@ protected function registerPackageItem(RegisteredItemInformation $item)
240
290
241
291
return false ;
242
292
}
293
+
294
+ /**
295
+ * Get the console command arguments.
296
+ *
297
+ * @return array
298
+ */
299
+ protected function getArguments ()
300
+ {
301
+ return [
302
+ ['package ' , InputArgument::REQUIRED , 'The name the package to install and register. ' ],
303
+ ];
304
+ }
305
+
306
+ /**
307
+ * Get the console command options.
308
+ *
309
+ * @return array
310
+ */
311
+ protected function getOptions ()
312
+ {
313
+ return [
314
+ ['register-only ' , 'r ' , InputOption::VALUE_NONE , 'The terminal command that should be assigned. ' , 'command:name ' ],
315
+ ];
316
+ }
317
+
243
318
}
0 commit comments