a php console application library.
- console application, run command/controller
- console input/output
- console color support
- console interactive
- github https://github.com/inhere/php-console.git
- git@osc https://git.oschina.net/inhere/php-console.git
NOTICE
- master branch -- is require
php >= 7
(recommended use)。 - php5 branch -- It's a branch of PHP 5, but it hasn't been updated for some time (the basic functionality is complete).
- by composer
edit composer.json
,at require
add
"inhere/console": "dev-master",
// "inhere/console": "dev-php5", // for php5
run: composer update
- Direct fetch
git clone https://git.oschina.net/inhere/php-console.git // git@osc
git clone https://github.com/inhere/php-console.git // github
use inhere\console\io\Input;
use inhere\console\io\Output;
use inhere\console\App;
$meta = [
'name' => 'My Console App',
'version' => '1.0.2',
];
$input = new Input;
$output = new Output;
$app = new App($meta, $input, $output);
// add command routes
$app->command('demo', function (Input $in, Output $out) {
$cmd = $in->getCommand();
$out->info('hello, this is a test command: ' . $cmd);
});
// run
$app->run();
now, you can see:
example(in terminal):
$ examples/app home/useArg status=2 name=john arg0 -s=test --page=23 --id=154 -e dev -v vvv -d -rf --debug --test=false
NOTICE:
- These words will be as a Boolean(
true
) value:on|yes|true
- These words will be as a Boolean(
false
) value:off|no|false
get command info:
echo $input->getScript(); // 'examples/app'
echo $input->getCommand(); // 'home/useArg'
get parsed arguments:
var_dump($input->getArgs());
output:
array(3) {
'status' => string(1) "2"
'name' => string(4) "john"
[0] => string(4) "arg0"
}
get parsed options:
var_dump($input->getOpts());
output:
array(10) {
's' => string(4) "test"
'e' => string(3) "dev"
'v' => string(3) "vvv"
'd' => bool(true)
'r' => bool(true)
'f' => bool(true)
'page' => string(2) "23"
'id' => string(3) "154"
'debug' => bool(true)
'test' => bool(false)
}
more method:
// argument
$first = $input->getFirstArg(); // 'arg0'
$status = $input->get('status', 'default'); // '2'
// option
$page = $input->getOpt('page') // '23'
$debug = $input->boolOpt('debug') // True
$test = $input->boolOpt('test') // False
echo "Your name:";
$text = $input->read();
// in terminal
// Your name: simon
echo $text; // 'simon'
basic output:
public function write(mixed $messages = '', $nl = true, $quit = false)
$output->write('hello');
$output->title()
$output->section()
$output->panel()
$output->table()
$output->helpPanel()
in the class inhere\console\utils\Interact
interactive method:
Select one of the options
select($description, $options, $default = null, $allowExit=true)
choice($description, $options, $default = null, $allowExit=true)
- example 1:
only values, no setting option
$select = Interact::select('Your city is ?', [
'chengdu', 'beijing', 'shanghai'
]);
output in terminal:
Your city is ?
0) chengdu
1) beijing
2) shanghai
q) Quit // quit option. is auto add. can setting it by 4th argument.
You choice: 0
echo $select; // '0'
- example 2:
custom option, setting a default value.
$select = Interact::select('Your city is ?', [
'a' => 'chengdu',
'b' => 'beijing',
'c' => 'shanghai'
], 'a');
output in terminal:
Your city is?
a) chengdu
b) beijing
c) shanghai
q) Quit // quit option. is auto add. can setting it by 4th argument.
You choice[default:a] : b
echo $select; // 'b'
public static function confirm($question, $default = true) bool
usage:
$result = Interact::confirm('Whether you want to continue ?');
output in terminal:
Whether you want to continue ?
Please confirm (yes|no) [default:yes]: n
result:
var_dump($result); // bool(false)
public static function ask($question, $default = null, \Closure $validator = null)
public static function question($question, $default = null, \Closure $validator = null)
$answer = Interact::ask('Please input your name?', null, function ($answer) {
if ( !preg_match('/\w+/', $answer) ) {
Interact::error('The name must match "/\w+/"');
return false;
}
return true;
});
MIT