Skip to content

asika32764/php-simple-console

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PHP Simple Console

Single file console framework to help you write build scripts.

Installation

Use composer:

composer require asika/simple-console

Or downlaod single file to use: Download Here

Getting Started

Use closure

#!/bin/sh php
<?php
// Include single file
include_once __DIR__ . '/Console.php';

// Or use composer
include_once __DIR__ . '/vendor/autolod.php';

$app = new \Asika\SimpleConsole\Console;

// Use closure
$app->execute(function (\Asika\SimpleConsole\Console $app)
{
    // PHP 5.3
    $app->out('Hello');

    // PHP 5.4 or higher use $this
    $this->out('Hello');

    // Return TRUE will auto convert to 0 exitcode.
    return true;
});

Or Create your own class.

class Build extends \Asika\SimpleConsole\Console
{
    protected $help = <<<HELP
[Usage] php build.php <version>

[Options]
    h | help   Show help information
    v          Show more debug information.
HELP;

    protected function doExecute ()
    {
        $this->out('Hello');

        // Return TRUE will auto convert to 0 exitcode.
        return true;
    }
}

$app = new Build;
$app->execute();

Show HELP

Add -h or --help to show usage, you can add custom usage to $this->help, or override $this->getHelp().

If you want to change h and help option, override $this->helpOptions = array('...').

Handle Error

Just throw Exception in doExecute(), Console will auto catch error.

throw new \RuntimeException('...');

Add -v to show backtrace if error.

Handle Wrong Arguments

Wrong Argument use \Asika\SimpleConsole\CommandArgsException

$arg = $this->getArgument(0);

if (!$arg)
{
    throw new \Asika\SimpleConsole\CommandArgsException('Please enter a name.');
}

Console will auto show help information.

[Warning] Please enter a name.

[Usage] console.php <name>

[Options]
    h | help   Show help info.
    v          Show more debug information.

Multiple Commands

Use delegate() to delegate to different methods.

//...

    protected function doExecute()
    {
        return $this->delegate($this->getArgument(0));
    }

    protected function foo()
    {
        $this->getArgument(1); // bar
    }

    protected function baz()
    {
        // ...
    }

Now you can add sub commands

php console.php foo bar
php console.php baz

If you want to strip first argument after delgated, you can follow this code:

$this->delegate(array_shift($this->args));

Now can use getArgument(0) in sub method and ignore the first command name.

The is another way:

$command = array_shift($this->args);

$this->delegate($command, ...$this->args);
protected function foo($first, $second = null)
{
}

API

getArgument($order[, $default = null])

$first = $this->getArgument(0, 'default value');

setArgument($order, $$value)

$this->setArgument(1, 'value');

getOption($name: array|string[, $default = null])

Get option --foo

$this->getOption('foo');

Get option -f or --foo, first match will return.

$this->getOption(array('f', 'foo'));

NOTE: -abc will convert to a => 1, b => 1, c => 1 And -vvv will convert to v => 3

setOption($name, $value)

Set otpion to toption list. $name also support array.

out($string[, $newline: bool = false])

Write to STDOUT,

$this->out('Hello')->out('World');

err($string[, $newline: bool = false])

Write to STDERR

$this->err('Hello')->err('World');

in($string[$default = null, $bool = false)

Ask a question, read from STDIN

$un = $this->in('Please enter username: ', 'default_name');

Read as boolean, add true to third argument:

$bool = $this->in('Are you sure? [Y/n]', [default true/false], true);
  • yes, y, 1, true will convert to TRUE
  • no, n, 0, false will convert to FALSE

exec($cmd)

A proxy to execute a cmd by exec() and return value.

It will add a title >> {your command} before exec so you will know what has been executed.