Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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

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 parsing

Options 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 file

Options:

-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.