This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | /* |
||
4 | * This file is part of the puli/cli package. |
||
5 | * |
||
6 | * (c) Bernhard Schussek <[email protected]> |
||
7 | * |
||
8 | * For the full copyright and license information, please view the LICENSE |
||
9 | * file that was distributed with this source code. |
||
10 | */ |
||
11 | |||
12 | namespace Puli\Cli; |
||
13 | |||
14 | use Puli\Cli\Handler\BindCommandHandler; |
||
15 | use Puli\Cli\Handler\BuildCommandHandler; |
||
16 | use Puli\Cli\Handler\CatCommandHandler; |
||
17 | use Puli\Cli\Handler\ConfigCommandHandler; |
||
18 | use Puli\Cli\Handler\FindCommandHandler; |
||
19 | use Puli\Cli\Handler\InstallerCommandHandler; |
||
20 | use Puli\Cli\Handler\LsCommandHandler; |
||
21 | use Puli\Cli\Handler\MapCommandHandler; |
||
22 | use Puli\Cli\Handler\ModuleCommandHandler; |
||
23 | use Puli\Cli\Handler\PluginCommandHandler; |
||
24 | use Puli\Cli\Handler\PublishCommandHandler; |
||
25 | use Puli\Cli\Handler\SelfUpdateCommandHandler; |
||
26 | use Puli\Cli\Handler\ServerCommandHandler; |
||
27 | use Puli\Cli\Handler\TreeCommandHandler; |
||
28 | use Puli\Cli\Handler\TypeCommandHandler; |
||
29 | use Puli\Cli\Handler\UpgradeCommandHandler; |
||
30 | use Puli\Cli\Handler\UrlCommandHandler; |
||
31 | use Puli\Cli\Proxy\DiscoveryManagerProxy; |
||
32 | use Puli\Cli\Proxy\RepositoryManagerProxy; |
||
33 | use Puli\Manager\Api\Container; |
||
34 | use Puli\Manager\Api\Context\ProjectContext; |
||
35 | use Puli\Manager\Api\Module\InstallInfo; |
||
36 | use Puli\Manager\Api\Server\Server; |
||
37 | use Puli\Manager\Module\ModuleFileConverter; |
||
38 | use Webmozart\Console\Api\Args\Format\Argument; |
||
39 | use Webmozart\Console\Api\Args\Format\Option; |
||
40 | use Webmozart\Console\Api\Event\ConsoleEvents; |
||
41 | use Webmozart\Console\Api\Event\PreHandleEvent; |
||
42 | use Webmozart\Console\Api\Formatter\Style; |
||
43 | use Webmozart\Console\Config\DefaultApplicationConfig; |
||
44 | |||
45 | /** |
||
46 | * The configuration of the Puli CLI. |
||
47 | * |
||
48 | * @since 1.0 |
||
49 | * |
||
50 | * @author Bernhard Schussek <[email protected]> |
||
51 | * @author Stephan Wentz <[email protected]> |
||
52 | */ |
||
53 | class PuliApplicationConfig extends DefaultApplicationConfig |
||
54 | { |
||
55 | /** |
||
56 | * The version of the Puli CLI. |
||
57 | */ |
||
58 | const VERSION = '@package_version@'; |
||
59 | |||
60 | /** |
||
61 | * @var Container |
||
62 | */ |
||
63 | private $puli; |
||
64 | |||
65 | /** |
||
66 | * Creates the configuration. |
||
67 | * |
||
68 | * @param Container $puli The Puli service container |
||
0 ignored issues
–
show
|
|||
69 | */ |
||
70 | public function __construct(Container $puli = null) |
||
71 | { |
||
72 | // Start Puli already so that plugins can change the CLI configuration |
||
73 | $this->puli = $puli ?: new Container(getcwd()); |
||
74 | |||
75 | if (!$this->puli->isStarted()) { |
||
76 | $this->puli->start(); |
||
77 | } |
||
78 | |||
79 | parent::__construct(); |
||
80 | } |
||
81 | |||
82 | /** |
||
83 | * {@inheritdoc} |
||
84 | */ |
||
85 | protected function configure() |
||
86 | { |
||
87 | // Make sure the console and Puli use the same event dispatcher so that |
||
88 | // Puli plugins can listen to the console events. |
||
89 | // Add the dispatcher before parent::configure() so that the parent |
||
90 | // listeners don't get overwritten. |
||
91 | $this->setEventDispatcher($this->puli->getEventDispatcher()); |
||
92 | |||
93 | parent::configure(); |
||
94 | |||
95 | $puli = $this->puli; |
||
96 | $context = $this->puli->getContext(); |
||
97 | |||
98 | $this |
||
99 | ->setName('puli') |
||
100 | ->setDisplayName('Puli') |
||
101 | ->setVersion(self::VERSION) |
||
102 | |||
103 | // Enable debug for unreleased versions only. Split the string to |
||
104 | // prevent its replacement during release |
||
105 | ->setDebug('@pack'.'age_version@' === self::VERSION) |
||
106 | |||
107 | ->addStyle(Style::tag('good')->fgGreen()) |
||
108 | ->addStyle(Style::tag('bad')->fgRed()) |
||
109 | ; |
||
110 | |||
111 | if ($context instanceof ProjectContext) { |
||
112 | // Don't do a version check in the global context (if not in a project) |
||
113 | $this->addEventListener( |
||
114 | ConsoleEvents::PRE_HANDLE, |
||
115 | function (PreHandleEvent $event) use ($context) { |
||
116 | $io = $event->getIO(); |
||
117 | $moduleFile = $context->getRootModuleFile(); |
||
118 | |||
119 | // Don't show warning for "upgrade" command |
||
120 | if ('upgrade' === $event->getCommand()->getName()) { |
||
121 | return; |
||
122 | } |
||
123 | |||
124 | if (version_compare($moduleFile->getVersion(), ModuleFileConverter::VERSION, '<')) { |
||
125 | $io->errorLine(sprintf( |
||
126 | '<warn>Warning: Your puli.json file has version %s, '. |
||
127 | 'but the latest version is %s. Run "puli upgrade" to '. |
||
128 | 'upgrade to %s.</warn>', |
||
129 | $moduleFile->getVersion(), |
||
130 | ModuleFileConverter::VERSION, |
||
131 | ModuleFileConverter::VERSION |
||
132 | )); |
||
133 | } |
||
134 | } |
||
135 | ); |
||
136 | } |
||
137 | |||
138 | $this |
||
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig , but not in Webmozart\Console\Api\Config\ApplicationConfig .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
139 | ->beginCommand('bind') |
||
140 | ->setDescription('Bind resources to binding types') |
||
141 | ->setHandler(function () use ($puli) { |
||
142 | return new BindCommandHandler( |
||
143 | $puli->getDiscoveryManager(), |
||
144 | $puli->getModuleManager()->getModules() |
||
145 | ); |
||
146 | }) |
||
147 | |||
148 | ->beginOptionCommand('add') |
||
149 | ->markAnonymous() |
||
150 | ->addArgument('artifact', Argument::REQUIRED, 'A class name or a query for resources') |
||
151 | ->addArgument('type', Argument::REQUIRED, 'The name of the binding type') |
||
152 | ->addOption('language', null, Option::REQUIRED_VALUE, 'The language of the resource query', 'glob', 'language') |
||
153 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A binding parameter in the form <key>=<value>', null, 'key=value') |
||
154 | ->addOption('class', null, Option::NO_VALUE, 'Force adding of a class binding') |
||
155 | ->addOption('force', 'f', Option::NO_VALUE, 'Add binding even if the binding type does not exist') |
||
156 | ->setHandlerMethod('handleAdd') |
||
157 | ->end() |
||
158 | |||
159 | ->beginOptionCommand('list') |
||
160 | ->markDefault() |
||
161 | ->addOption('root', null, Option::NO_VALUE, 'Show bindings of the root module') |
||
162 | ->addOption('module', 'm', Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Show bindings of a module', null, 'module') |
||
163 | ->addOption('all', 'a', Option::NO_VALUE, 'Show bindings of all modules') |
||
164 | ->addOption('enabled', null, Option::NO_VALUE, 'Show enabled bindings') |
||
165 | ->addOption('disabled', null, Option::NO_VALUE, 'Show disabled bindings') |
||
166 | ->addOption('type-not-found', null, Option::NO_VALUE, 'Show bindings whose type is not found') |
||
167 | ->addOption('type-not-enabled', null, Option::NO_VALUE, 'Show bindings whose type is not enabled') |
||
168 | ->addOption('ignored', null, Option::NO_VALUE, 'Show bindings whose type is disabled') |
||
169 | ->addOption('invalid', null, Option::NO_VALUE, 'Show bindings with invalid parameters') |
||
170 | ->addOption('language', null, Option::REQUIRED_VALUE, 'The language of the resource query', 'glob', 'language') |
||
171 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A binding parameter in the form <key>=<value>', null, 'key=value') |
||
172 | ->setHandlerMethod('handleList') |
||
173 | ->end() |
||
174 | |||
175 | ->beginOptionCommand('update', 'u') |
||
176 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the updated binding') |
||
177 | ->addOption('query', null, Option::REQUIRED_VALUE, 'A query for resources') |
||
178 | ->addOption('class', null, Option::REQUIRED_VALUE, 'A class name') |
||
179 | ->addOption('type', null, Option::REQUIRED_VALUE, 'The name of the binding type') |
||
180 | ->addOption('language', null, Option::REQUIRED_VALUE, 'The language of the resource query', null, 'language') |
||
181 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A binding parameter in the form <key>=<value>', null, 'key=value') |
||
182 | ->addOption('unset-param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Unset a binding parameter', null, 'key') |
||
183 | ->addOption('force', 'f', Option::NO_VALUE, 'Update binding even if the binding type does not exist') |
||
184 | ->setHandlerMethod('handleUpdate') |
||
185 | ->end() |
||
186 | |||
187 | ->beginOptionCommand('delete', 'd') |
||
188 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the removed binding') |
||
189 | ->setHandlerMethod('handleDelete') |
||
190 | ->end() |
||
191 | |||
192 | ->beginOptionCommand('enable') |
||
193 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the enabled binding') |
||
194 | ->setHandlerMethod('handleEnable') |
||
195 | ->end() |
||
196 | |||
197 | ->beginOptionCommand('disable') |
||
198 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the disabled binding') |
||
199 | ->setHandlerMethod('handleDisable') |
||
200 | ->end() |
||
201 | ->end() |
||
202 | ; |
||
203 | |||
204 | $this |
||
205 | ->beginCommand('build') |
||
206 | ->setDescription('Build the resource repository/discovery') |
||
207 | ->addArgument('target', Argument::OPTIONAL, 'The build target. One of "repository", "discovery", "factory" and "all"', 'all') |
||
208 | ->setHandler(function () use ($puli) { |
||
209 | return new BuildCommandHandler( |
||
210 | // Use proxies to make sure this command runs even if |
||
211 | // the factory file is corrupt. If the file is corrupt, |
||
212 | // we get an error when loading the actual managers. |
||
213 | new RepositoryManagerProxy($puli), |
||
214 | new DiscoveryManagerProxy($puli), |
||
215 | $puli->getFactoryManager() |
||
216 | ); |
||
217 | }) |
||
218 | ->end() |
||
219 | ; |
||
220 | |||
221 | $this |
||
222 | ->beginCommand('cat') |
||
223 | ->setDescription('Concatenate a file resource in the repository') |
||
224 | ->addArgument('path', Argument::REQUIRED, 'The path of a resource') |
||
225 | ->setHandler(function () use ($puli) { |
||
226 | return new CatCommandHandler( |
||
227 | $puli->getRepository() |
||
228 | ); |
||
229 | }) |
||
230 | ->end() |
||
231 | ; |
||
232 | |||
233 | $this |
||
0 ignored issues
–
show
The method
beginSubCommand does only exist in Webmozart\Console\Api\Config\CommandConfig , but not in Webmozart\Console\Api\Config\ApplicationConfig .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
234 | ->beginCommand('config') |
||
235 | ->setDescription('Display and modify configuration values') |
||
236 | ->setHandler(function () use ($puli) { |
||
237 | return new ConfigCommandHandler($puli->getRootModuleFileManager()); |
||
238 | }) |
||
239 | |||
240 | ->beginSubCommand('list') |
||
241 | ->markDefault() |
||
242 | ->addOption('parsed', null, Option::NO_VALUE, 'Replace placeholders by their values in the output') |
||
243 | ->setHandlerMethod('handleList') |
||
244 | ->end() |
||
245 | |||
246 | ->beginSubCommand('show') |
||
247 | ->markAnonymous() |
||
248 | ->addArgument('key', Argument::REQUIRED, 'The configuration key to show. May contain wildcards ("*")') |
||
249 | ->addOption('parsed', null, Option::NO_VALUE, 'Replace placeholders by their values in the output') |
||
250 | ->setHandlerMethod('handleShow') |
||
251 | ->end() |
||
252 | |||
253 | ->beginSubCommand('set') |
||
254 | ->markAnonymous() |
||
255 | ->addArgument('key', Argument::REQUIRED, 'The modified configuration key') |
||
256 | ->addArgument('value', Argument::REQUIRED, 'The value to set for the configuration key') |
||
257 | ->setHandlerMethod('handleSet') |
||
258 | ->end() |
||
259 | |||
260 | ->beginOptionCommand('reset', 'r') |
||
261 | ->addArgument('key', Argument::REQUIRED, 'The configuration key(s) to reset. May contain wildcards ("*")') |
||
262 | ->setHandlerMethod('handleReset') |
||
263 | ->end() |
||
264 | ->end() |
||
265 | ; |
||
266 | |||
267 | $this |
||
268 | ->beginCommand('find') |
||
269 | ->setDescription('Find resources by different criteria') |
||
270 | ->addOption('path', null, Option::REQUIRED_VALUE, 'The resource path. May contain the wildcard "*"') |
||
271 | ->addOption('name', null, Option::REQUIRED_VALUE, 'The resource filename. May contain the wildcard "*"') |
||
272 | ->addOption('class', null, Option::REQUIRED_VALUE, 'The short name of a resource class') |
||
273 | ->addOption('type', null, Option::REQUIRED_VALUE, 'The name of a binding type') |
||
274 | ->addOption('language', null, Option::REQUIRED_VALUE, 'The language of the query passed with --path', 'glob') |
||
275 | ->setHandler(function () use ($puli) { |
||
276 | return new FindCommandHandler( |
||
277 | $puli->getRepository(), |
||
278 | $puli->getDiscovery() |
||
279 | ); |
||
280 | }) |
||
281 | ->end() |
||
282 | ; |
||
283 | |||
284 | $this |
||
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig , but not in Webmozart\Console\Api\Config\ApplicationConfig .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
285 | ->beginCommand('installer') |
||
286 | ->setDescription('Manage the installers used to install web resources') |
||
287 | ->setHandler(function () use ($puli) { |
||
288 | return new InstallerCommandHandler($puli->getInstallerManager()); |
||
289 | }) |
||
290 | |||
291 | ->beginOptionCommand('list') |
||
292 | ->markDefault() |
||
293 | ->addOption('long', 'l', Option::NO_VALUE, 'Print the fully-qualified class name') |
||
294 | ->setHandlerMethod('handleList') |
||
295 | ->end() |
||
296 | |||
297 | ->beginOptionCommand('add', 'a') |
||
298 | ->addArgument('name', Argument::REQUIRED, 'The name of the installer') |
||
299 | ->addArgument('class', Argument::REQUIRED, 'The fully-qualified class name of the installer') |
||
300 | ->addOption('description', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'The description of the installer') |
||
301 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Additional installer parameters') |
||
302 | ->setHandlerMethod('handleAdd') |
||
303 | ->end() |
||
304 | |||
305 | ->beginOptionCommand('delete', 'd') |
||
306 | ->addArgument('name', Argument::REQUIRED, 'The name of the installer to remove') |
||
307 | ->setHandlerMethod('handleDelete') |
||
308 | ->end() |
||
309 | ->end() |
||
310 | ; |
||
311 | |||
312 | $this |
||
313 | ->beginCommand('ls') |
||
314 | ->setDescription('List the children of a resource in the repository') |
||
315 | ->addArgument('path', Argument::OPTIONAL, 'The path of a resource', '/') |
||
316 | ->addOption('long', 'l', Option::NO_VALUE, 'Print more information about each child') |
||
317 | ->setHandler(function () use ($puli) { |
||
318 | return new LsCommandHandler( |
||
319 | $puli->getRepository() |
||
320 | ); |
||
321 | }) |
||
322 | ->end() |
||
323 | ; |
||
324 | |||
325 | $this |
||
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig , but not in Webmozart\Console\Api\Config\ApplicationConfig .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
326 | ->beginCommand('map') |
||
327 | ->setDescription('Display and change path mappings') |
||
328 | ->setHandler(function () use ($puli) { |
||
329 | return new MapCommandHandler( |
||
330 | $puli->getRepositoryManager(), |
||
331 | $puli->getModuleManager()->getModules() |
||
332 | ); |
||
333 | }) |
||
334 | |||
335 | ->beginOptionCommand('add') |
||
336 | ->markAnonymous() |
||
337 | ->addArgument('path', Argument::REQUIRED) |
||
338 | ->addArgument('file', Argument::REQUIRED | Argument::MULTI_VALUED) |
||
339 | ->addOption('force', 'f', Option::NO_VALUE, 'Map even if the target path does not exist') |
||
340 | ->setHandlerMethod('handleAdd') |
||
341 | ->end() |
||
342 | |||
343 | ->beginOptionCommand('list') |
||
344 | ->markDefault() |
||
345 | ->addOption('root', null, Option::NO_VALUE, 'Show mappings of the root module') |
||
346 | ->addOption('module', 'm', Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Show mappings of a module', null, 'module') |
||
347 | ->addOption('all', 'a', Option::NO_VALUE, 'Show mappings of all modules') |
||
348 | ->addOption('enabled', null, Option::NO_VALUE, 'Show enabled mappings') |
||
349 | ->addOption('not-found', null, Option::NO_VALUE, 'Show mappings whose referenced paths do not exist') |
||
350 | ->addOption('conflict', null, Option::NO_VALUE, 'Show conflicting mappings') |
||
351 | ->setHandlerMethod('handleList') |
||
352 | ->end() |
||
353 | |||
354 | ->beginOptionCommand('update', 'u') |
||
355 | ->addArgument('path', Argument::REQUIRED) |
||
356 | ->addOption('add', 'a', Option::REQUIRED_VALUE | Option::MULTI_VALUED | Option::PREFER_LONG_NAME, 'Add a file to the path mapping', null, 'file') |
||
357 | ->addOption('remove', 'r', Option::REQUIRED_VALUE | Option::MULTI_VALUED | Option::PREFER_LONG_NAME, 'Remove a file from the path mapping', null, 'file') |
||
358 | ->addOption('force', 'f', Option::NO_VALUE, 'Map even if the target path does not exist') |
||
359 | ->setHandlerMethod('handleUpdate') |
||
360 | ->end() |
||
361 | |||
362 | ->beginOptionCommand('delete', 'd') |
||
363 | ->addArgument('path', Argument::REQUIRED) |
||
364 | ->addArgument('file', Argument::OPTIONAL) |
||
365 | ->setHandlerMethod('handleDelete') |
||
366 | ->end() |
||
367 | ->end() |
||
368 | ; |
||
369 | |||
370 | $this |
||
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig , but not in Webmozart\Console\Api\Config\ApplicationConfig .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
371 | ->beginCommand('module') |
||
372 | ->setDescription('Display the installed modules') |
||
373 | ->setHandler(function () use ($puli) { |
||
374 | return new ModuleCommandHandler($puli->getModuleManager()); |
||
375 | }) |
||
376 | |||
377 | ->beginOptionCommand('install', 'i') |
||
378 | ->addArgument('path', Argument::REQUIRED, 'The path to the module') |
||
379 | ->addArgument('name', Argument::OPTIONAL, 'The name of the module. Taken from puli.json if not passed.') |
||
380 | ->addOption('installer', null, Option::REQUIRED_VALUE, 'The name of the installer', InstallInfo::DEFAULT_INSTALLER_NAME) |
||
381 | ->addOption('dev', null, Option::NO_VALUE, 'Install the module in the development environment') |
||
382 | ->setHandlerMethod('handleInstall') |
||
383 | ->end() |
||
384 | |||
385 | ->beginOptionCommand('list') |
||
386 | ->markDefault() |
||
387 | ->addOption('installer', null, Option::REQUIRED_VALUE, 'Show modules installed by a specific installer') |
||
388 | ->addOption('enabled', null, Option::NO_VALUE, 'Show enabled modules') |
||
389 | ->addOption('not-found', null, Option::NO_VALUE, 'Show modules that could not be found') |
||
390 | ->addOption('not-loadable', null, Option::NO_VALUE, 'Show modules that could not be loaded') |
||
391 | ->addOption('dev', null, Option::NO_VALUE, 'Show modules of the development environment') |
||
392 | ->addOption('prod', null, Option::NO_VALUE, 'Show modules of the production environment') |
||
393 | ->addOption('format', null, Option::REQUIRED_VALUE, 'The format of the output. You can use the variables %name%, %install_path%, %installer% and %state% in the format string', null, 'format') |
||
394 | ->setHandlerMethod('handleList') |
||
395 | ->end() |
||
396 | |||
397 | ->beginOptionCommand('rename') |
||
398 | ->addArgument('name', Argument::REQUIRED, 'The name of the module') |
||
399 | ->addArgument('new-name', Argument::REQUIRED, 'The new name of the module') |
||
400 | ->setHandlerMethod('handleRename') |
||
401 | ->end() |
||
402 | |||
403 | ->beginOptionCommand('delete', 'd') |
||
404 | ->addArgument('name', Argument::REQUIRED, 'The name of the module') |
||
405 | ->setHandlerMethod('handleDelete') |
||
406 | ->end() |
||
407 | |||
408 | ->beginOptionCommand('clean') |
||
409 | ->setHandlerMethod('handleClean') |
||
410 | ->end() |
||
411 | ->end() |
||
412 | ; |
||
413 | |||
414 | $this |
||
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig , but not in Webmozart\Console\Api\Config\ApplicationConfig .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
415 | ->beginCommand('plugin') |
||
416 | ->setDescription('Manage the installed Puli plugins') |
||
417 | ->setHandler(function () use ($puli) { |
||
418 | return new PluginCommandHandler($puli->getRootModuleFileManager()); |
||
419 | }) |
||
420 | |||
421 | ->beginOptionCommand('install', 'i') |
||
422 | ->addArgument('class', Argument::REQUIRED, 'The fully-qualified plugin class name') |
||
423 | ->setHandlerMethod('handleInstall') |
||
424 | ->end() |
||
425 | |||
426 | ->beginOptionCommand('list') |
||
427 | ->markDefault() |
||
428 | ->setHandlerMethod('handleList') |
||
429 | ->end() |
||
430 | |||
431 | ->beginOptionCommand('delete', 'd') |
||
432 | ->addArgument('class', Argument::REQUIRED, 'The fully-qualified plugin class name') |
||
433 | ->setHandlerMethod('handleDelete') |
||
434 | ->end() |
||
435 | ->end() |
||
436 | ; |
||
437 | |||
438 | $this |
||
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig , but not in Webmozart\Console\Api\Config\ApplicationConfig .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
439 | ->beginCommand('publish') |
||
440 | ->setDescription('Manage public resources') |
||
441 | ->setHandler(function () use ($puli) { |
||
442 | return new PublishCommandHandler( |
||
443 | $puli->getAssetManager(), |
||
444 | $puli->getInstallationManager(), |
||
445 | $puli->getServerManager() |
||
446 | ); |
||
447 | }) |
||
448 | |||
449 | ->beginOptionCommand('add') |
||
450 | ->markAnonymous() |
||
451 | ->addArgument('path', Argument::REQUIRED, 'The resource path') |
||
452 | ->addArgument('server', Argument::REQUIRED, 'The resource path') |
||
453 | ->addArgument('server-path', Argument::OPTIONAL, 'The path in the document root of the server', '/') |
||
454 | ->addOption('force', 'f', Option::NO_VALUE, 'Map even if the server does not exist') |
||
455 | ->setHandlerMethod('handleAdd') |
||
456 | ->end() |
||
457 | |||
458 | ->beginOptionCommand('update', 'u') |
||
459 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the mapping') |
||
460 | ->addOption('path', null, Option::REQUIRED_VALUE, 'The resource path') |
||
461 | ->addOption('server', 's', Option::REQUIRED_VALUE | Option::PREFER_LONG_NAME, 'The name of the target server') |
||
462 | ->addOption('server-path', null, Option::REQUIRED_VALUE, 'The path in the document root') |
||
463 | ->addOption('force', 'f', Option::NO_VALUE, 'Update even if the server does not exist') |
||
464 | ->setHandlerMethod('handleUpdate') |
||
465 | ->end() |
||
466 | |||
467 | ->beginOptionCommand('delete', 'd') |
||
468 | ->addArgument('uuid', Argument::REQUIRED, 'The UUID (prefix) of the mapping') |
||
469 | ->setHandlerMethod('handleDelete') |
||
470 | ->end() |
||
471 | |||
472 | ->beginOptionCommand('list', 'l') |
||
473 | ->markDefault() |
||
474 | ->setHandlerMethod('handleList') |
||
475 | ->end() |
||
476 | |||
477 | ->beginOptionCommand('install') |
||
478 | ->addArgument('server', Argument::OPTIONAL, 'The server to install. By default, all servers are installed') |
||
479 | ->setHandlerMethod('handleInstall') |
||
480 | ->end() |
||
481 | ->end() |
||
482 | ; |
||
483 | |||
484 | $this |
||
485 | ->beginCommand('self-update') |
||
486 | ->setDescription('Update Puli to the latest version.') |
||
487 | ->addOption('stable', null, Option::NO_VALUE, 'Update to the latest stable version') |
||
488 | ->addOption('unstable', null, Option::NO_VALUE, 'Update to the latest unstable version') |
||
489 | ->setHandler(function () { |
||
490 | return new SelfUpdateCommandHandler(); |
||
491 | }) |
||
492 | ->enableIf('phar://' === substr(__DIR__, 0, 7)) |
||
493 | ->end() |
||
494 | ; |
||
495 | |||
496 | $this |
||
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig , but not in Webmozart\Console\Api\Config\ApplicationConfig .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
497 | ->beginCommand('server') |
||
498 | ->setDescription('Manage your asset servers') |
||
499 | ->setHandler(function () use ($puli) { |
||
500 | return new ServerCommandHandler($puli->getServerManager()); |
||
501 | }) |
||
502 | |||
503 | ->beginOptionCommand('list') |
||
504 | ->markDefault() |
||
505 | ->setHandlerMethod('handleList') |
||
506 | ->end() |
||
507 | |||
508 | ->beginOptionCommand('add', 'a') |
||
509 | ->addArgument('name', Argument::REQUIRED, 'The name of the added server') |
||
510 | ->addArgument('document-root', Argument::REQUIRED, 'The document root of the server') |
||
511 | ->addOption('installer', null, Option::REQUIRED_VALUE, 'The name of the used installer', 'symlink') |
||
512 | ->addOption('url-format', null, Option::REQUIRED_VALUE, 'The format of the generated resource URLs', Server::DEFAULT_URL_FORMAT) |
||
513 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Additional parameters required by the resource installer') |
||
514 | ->setHandlerMethod('handleAdd') |
||
515 | ->end() |
||
516 | |||
517 | ->beginOptionCommand('update', 'u') |
||
518 | ->addArgument('name', Argument::REQUIRED, 'The name of the updated server') |
||
519 | ->addOption('document-root', null, Option::REQUIRED_VALUE, 'The document root of the server') |
||
520 | ->addOption('installer', null, Option::REQUIRED_VALUE, 'The name of the used installer', 'symlink') |
||
521 | ->addOption('url-format', null, Option::REQUIRED_VALUE, 'The format of the generated resource URLs', Server::DEFAULT_URL_FORMAT) |
||
522 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Additional parameters required by the resource installer') |
||
523 | ->addOption('unset-param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Parameters to remove from the server') |
||
524 | ->setHandlerMethod('handleUpdate') |
||
525 | ->end() |
||
526 | |||
527 | ->beginOptionCommand('delete', 'd') |
||
528 | ->addArgument('name', Argument::REQUIRED, 'The name of the server to remove') |
||
529 | ->setHandlerMethod('handleDelete') |
||
530 | ->end() |
||
531 | ->end() |
||
532 | ; |
||
533 | |||
534 | $this |
||
535 | ->beginCommand('tree') |
||
536 | ->setDescription('Print the contents of a resource as tree') |
||
537 | ->addArgument('path', Argument::OPTIONAL, 'The path of a resource', '/') |
||
538 | ->setHandler(function () use ($puli) { |
||
539 | return new TreeCommandHandler($puli->getRepository()); |
||
540 | }) |
||
541 | ->end() |
||
542 | ; |
||
543 | |||
544 | $this |
||
0 ignored issues
–
show
The method
beginOptionCommand does only exist in Webmozart\Console\Api\Config\CommandConfig , but not in Webmozart\Console\Api\Config\ApplicationConfig .
It seems like the method you are trying to call exists only in some of the possible types. Let’s take a look at an example: class A
{
public function foo() { }
}
class B extends A
{
public function bar() { }
}
/**
* @param A|B $x
*/
function someFunction($x)
{
$x->foo(); // This call is fine as the method exists in A and B.
$x->bar(); // This method only exists in B and might cause an error.
}
Available Fixes
![]() |
|||
545 | ->beginCommand('type') |
||
546 | ->setDescription('Display and change binding types') |
||
547 | ->setHandler(function () use ($puli) { |
||
548 | return new TypeCommandHandler( |
||
549 | $puli->getDiscoveryManager(), |
||
550 | $puli->getModuleManager()->getModules() |
||
551 | ); |
||
552 | }) |
||
553 | |||
554 | ->beginOptionCommand('define') |
||
555 | ->addArgument('name', Argument::REQUIRED, 'The name of the binding type') |
||
556 | ->addOption('description', null, Option::REQUIRED_VALUE, 'A human-readable description of the type') |
||
557 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A type parameter in the form <key> or <key>=<value>', null, 'key=value') |
||
558 | ->addOption('param-description', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A human-readable parameter description in the form <key>=<description>', null, 'key=description') |
||
559 | ->addOption('force', 'f', Option::NO_VALUE, 'Add type even if another type exists with the same name') |
||
560 | ->setHandlerMethod('handleDefine') |
||
561 | ->end() |
||
562 | |||
563 | ->beginSubCommand('list') |
||
564 | ->markDefault() |
||
565 | ->addOption('root', null, Option::NO_VALUE, 'Show types of the root module') |
||
566 | ->addOption('module', 'm', Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Show types of a module', null, 'module') |
||
567 | ->addOption('all', 'a', Option::NO_VALUE, 'Show types of all modules') |
||
568 | ->addOption('enabled', null, Option::NO_VALUE, 'Show enabled types') |
||
569 | ->addOption('duplicate', null, Option::NO_VALUE, 'Show duplicate types') |
||
570 | ->setHandlerMethod('handleList') |
||
571 | ->end() |
||
572 | |||
573 | ->beginOptionCommand('update', 'u') |
||
574 | ->addArgument('name', Argument::REQUIRED, 'The name of the binding type') |
||
575 | ->addOption('description', null, Option::REQUIRED_VALUE, 'A human-readable description of the type') |
||
576 | ->addOption('param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A type parameter in the form <key> or <key>=<value>', null, 'key=value') |
||
577 | ->addOption('param-description', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'A human-readable parameter description in the form <key>=<description>', null, 'key=description') |
||
578 | ->addOption('unset-param', null, Option::REQUIRED_VALUE | Option::MULTI_VALUED, 'Unset a type parameter', null, 'key') |
||
579 | ->setHandlerMethod('handleUpdate') |
||
580 | ->end() |
||
581 | |||
582 | ->beginOptionCommand('delete', 'd') |
||
583 | ->addArgument('name', Argument::REQUIRED, 'The name of the binding type') |
||
584 | ->setHandlerMethod('handleDelete') |
||
585 | ->end() |
||
586 | ->end() |
||
587 | ; |
||
588 | |||
589 | $this |
||
590 | ->beginCommand('upgrade') |
||
591 | ->setDescription('Upgrades puli.json to the newest version') |
||
592 | ->addArgument('version', Argument::OPTIONAL, 'The version to upgrade/downgrade to', ModuleFileConverter::VERSION) |
||
593 | ->setHandler(function () use ($puli) { |
||
594 | return new UpgradeCommandHandler($puli->getRootModuleFileManager()); |
||
595 | }) |
||
596 | ->end() |
||
597 | ; |
||
598 | |||
599 | $this |
||
600 | ->beginCommand('url') |
||
601 | ->setDescription('Generate the URL of a public resource') |
||
602 | ->addArgument('path', Argument::REQUIRED | Argument::MULTI_VALUED, 'The path of a resource') |
||
603 | ->setHandler(function () use ($puli) { |
||
604 | return new UrlCommandHandler( |
||
605 | $puli->getUrlGenerator(), |
||
606 | $puli->getRepository() |
||
607 | ); |
||
608 | }) |
||
609 | ->end() |
||
610 | ; |
||
611 | } |
||
612 | } |
||
613 |
This check looks for
@param
annotations where the type inferred by our type inference engine differs from the declared type.It makes a suggestion as to what type it considers more descriptive.
Most often this is a case of a parameter that can be null in addition to its declared types.