- WIP on CLI works
This commit is contained in:
		
							parent
							
								
									32d5079559
								
							
						
					
					
						commit
						6d771ed88f
					
				@ -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", "",
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -47,8 +47,6 @@ class CliRequest
 | 
			
		||||
            $this->command[] = $cmd;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        dump($executionString);
 | 
			
		||||
 | 
			
		||||
        $this->command = $executionString;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,6 @@
 | 
			
		||||
 | 
			
		||||
namespace Mcnd\CLI;
 | 
			
		||||
 | 
			
		||||
#[\Attribute]
 | 
			
		||||
class Command
 | 
			
		||||
{
 | 
			
		||||
    public function __construct(
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
 | 
			
		||||
@ -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':
 | 
			
		||||
 | 
			
		||||
@ -2,7 +2,6 @@
 | 
			
		||||
 | 
			
		||||
namespace Mcnd\CLI;
 | 
			
		||||
 | 
			
		||||
#[\Attribute(\Attribute::IS_REPEATABLE | \Attribute::TARGET_CLASS)]
 | 
			
		||||
class Option
 | 
			
		||||
{
 | 
			
		||||
    public const ARGUMENT_NONE = 0;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user