- WIP on CLI works

This commit is contained in:
Dave Mc Nicoll 2024-11-11 20:20:51 +00:00
parent 32d5079559
commit 6d771ed88f
6 changed files with 25 additions and 17 deletions

View File

@ -48,14 +48,15 @@ class CliMiddleware implements MiddlewareInterface
$cliRequest = new CliRequest($request);
# $cliRequest->setOptions($commands->getOptions());
if ( $command = $this->commands->matchCommand($cliRequest->command, $cliRequest->options) ) {
if ( $command = $this->commands->matchCommand($cliRequest->command) ) {
if ($command->callback) {
if (is_string($command->callback)) {
list($class, $method) = explode('::', $command->callback);
return $this->container->make($class)->{$method}($request->withAttribute('cli.command', $command)->withAttribute('cli.request', $cliRequest), []);
$request = $request->withAttribute('cli.command', $command)
->withAttribute('cli.request', $cliRequest);
return $this->container->make($class)->{$method}($request, []);
}
}
else {
@ -80,11 +81,11 @@ class CliMiddleware implements MiddlewareInterface
{
$text = [
$command->description, "",
"Usage:",
"#[color: rgb(145;130;195), format: bold]Usage:[#]",
" command [options] [arguments]", "",
"Options:",
"#[color: rgb(145;130;195), format: bold]Options:[#]",
" OPTIONS HERE", "",
"Available commands:",
"#[color: rgb(145;130;195), format: bold]Available commands:[#]",
" COMMANDS HERE", "",
];

View File

@ -47,8 +47,6 @@ class CliRequest
$this->command[] = $cmd;
}
dump($executionString);
$this->command = $executionString;
}

View File

@ -2,7 +2,6 @@
namespace Mcnd\CLI;
#[\Attribute]
class Command
{
public function __construct(

View File

@ -19,14 +19,25 @@ class CommandStack
$this->commands[] = $command;
}
public function matchCommand(array $commands, array $options) : null|Command
/**
* Matches the closest command found from the stack
*
* @param array $commands
* @param array $options
* @return Command|null
*/
public function matchCommand(array $commands) : null|Command
{
$cmd = implode(' ', $commands);
while ($commands) {
$cmd = implode(' ', $commands);
foreach($this->commands as $command) {
if ($command->name === $cmd) {
return $command;
foreach ($this->commands as $command) {
if ($command->name === $cmd) {
return $command;
}
}
array_pop($commands);
}
return null;

View File

@ -53,7 +53,7 @@ class AsciiFormatter
);
}
list($scope, $value) = explode(':', $formatting, 2);
list($scope, $value) = array_map('trim', explode(':', $formatting, 2));
switch($scope) {
case 'color':

View File

@ -2,7 +2,6 @@
namespace Mcnd\CLI;
#[\Attribute(\Attribute::IS_REPEATABLE | \Attribute::TARGET_CLASS)]
class Option
{
public const ARGUMENT_NONE = 0;