Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lijinma/commander
PHP command-line interfaces made easy
https://github.com/lijinma/commander
command console php-command php-console
Last synced: about 1 month ago
JSON representation
PHP command-line interfaces made easy
- Host: GitHub
- URL: https://github.com/lijinma/commander
- Owner: lijinma
- Created: 2014-12-24T06:21:10.000Z (about 10 years ago)
- Default Branch: master
- Last Pushed: 2020-02-20T09:38:02.000Z (almost 5 years ago)
- Last Synced: 2024-08-18T10:13:00.880Z (4 months ago)
- Topics: command, console, php-command, php-console
- Language: PHP
- Size: 21.5 KB
- Stars: 13
- Watchers: 3
- Forks: 4
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Commander
=========The solution for php command-line interfaces, inspired by [commander](https://github.com/tj/commander.js) in Node.js.
Actually some funtions in Commander is refer to [commander](https://github.com/tj/commander.js), so really thank TJ.
## Installation
$ composer require "lijinma/commander"
## Option parsingOptions with commander are defined with the `option()` method, also serving as documentation for the options. The example below parses args and options from `$argv`.
```php
version('0.0.1')
->option('-p, --peppers', 'Add peppers')
->option('-P, --pineapple', 'Add pineapple')
->option('-b, --bbq', 'Add bbq sauce')
->option('-c, --cheese [type]', 'Add the specified type of cheese')
->parse($argv);echo 'you ordered a pizza with:' . PHP_EOL;
if (isset($cmd->peppers)) {
echo ' - peppers' . PHP_EOL;
}
if (isset($cmd->pineapple)) {
echo ' - pineapple' . PHP_EOL;
}
if (isset($cmd->bbq)) {
echo ' - bbq' . PHP_EOL;
}if (isset($cmd->cheese)) {
echo " - $cmd->cheese cheese" . PHP_EOL;
}```
![](https://raw.githubusercontent.com/lijinma/MyBox/master/commander1.png)
Short flags may be passed as a single arg, for example -abc is equivalent to -a -b -c.
## Sub commands
```php
version('0.0.1')
->command('rmdir [otherDirs...]', 'Remove the directory')
->action(
function ($dir, $otherDirs) {
echo 'You will remove the following directory: ' . $dir . PHP_EOL;
if ($otherDirs) {
echo 'And other directories: ' . implode(', ', $otherDirs) . PHP_EOL;
}
}
);$cmd->command('rm ', 'Remove a file')
->action(
function ($file) {
echo 'You will remove the following file: ' . $file . PHP_EOL;
}
);$cmd->parse($argv);
```
![](https://raw.githubusercontent.com/lijinma/MyBox/master/commander2.png)Every command has one action.
##Automated --help
I really don't like the help generated by Symfony/Console, it's complicated and heavy.
```
Usage: test.php [options]Commands:
rmdir [otherDirs...] Remove the directory
rm Remove a fileOptions:
-h, --help Output usage information
```## Test Commander
I use [PHPSpec](http://www.phpspec.net) to do unit test. PHPSpec is an awesome test framework.
```
$ composer install
$ phpspec run
```##License
Commander is released under the MIT license:
> The MIT License
>
> Copyright (c) 2014 Jinma Li \< [email protected] \>
>
> Permission is hereby granted, free of charge, to any person obtaining a copy
> of this software and associated documentation files (the "Software"), to deal
> in the Software without restriction, including without limitation the rights
> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> copies of the Software, and to permit persons to whom the Software is
> furnished to do so, subject to the following conditions:
>
> The above copyright notice and this permission notice shall be included in
> all copies or substantial portions of the Software.
>
> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
> THE SOFTWARE.