, (*1)
, (*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..."
// ]
// ]