 , (*1)
, (*1)
  
 
 
 
 
 
 , (*2)
 
, (*2)
DeGraciaMathieu/Clike
The command design pattern is useful to create modular components for a command line shell application that can be expanded with more functionality implemented later by separate modules., (*3)
Installation
Run in console below command to download package to your project:, (*4)
composer require degraciamathieu/clike
Usage
Create a command
A command is a class that must implement the interface DeGraciaMathieu\Clike\Contracts\Command::class., (*5)
The following example is a valid command., (*6)
use DeGraciaMathieu\Clike\Lines;
use DeGraciaMathieu\Clike\Contracts;
class Clear implements Contracts\Command {
    /**
     * Get the command description
     */
    public function description() :string
    {
        return 'Command description...';
    }
    /**
     * Check if the command is executable
     */
    public function authorized() :bool
    {
        return true;
    }
    /**
     * Bind of this command
     */
    public function binding() :string
    {
        return '/clear';
    }
    /**
     * Code executed by this command
     */
    public function process() :void
    {
        //
    }
    /**
     * Output of this command
     */
    public function output() :array
    {
        return [
            new Lines\Info('Output text...'),
        ];
    }
}
Execute a command
Now let's play with our Clear command., (*7)
use DeGraciaMathieu\Clike\Command;
$command = new Command();
$command->execute(new Clear());
After checking that we can use this command with the authorized method this code will execute the process method of our command., (*8)
To finally execute the output method displaying the following result., (*9)
// array:2 [
//   "timestamp" => 1531339693
//   "lines" => array:1 [
//     0 => array:2 [
//       "type" => "info"
//       "content" => "Output text..."
//     ]
//   ]
// ]
Execute a command with Terminal
use DeGraciaMathieu\Clike\Terminal;
$terminal = new Terminal([
    Clear::class,
]);
$terminal->execute('/clear');
Retrieve all available commands with Terminal
use DeGraciaMathieu\Clike\Terminal;
$terminal = new Terminal([
    Clear::class,
]);
$terminal->getAvailableCommands();
// [
//     [
//       "binding" => "/clear"
//       "description" => "Command description..."
//     ]
// ]