Commands

Last updated: Tue, 08 Jun 2021 00:39

You can create some commands to call your functions or services to automate some jobs in crontab for example.

Create a command

You need to implement \Berlioz\Cli\Core\Command\CommandInterface interface or extends \Berlioz\CliCore\Command\AbstractCommand abstract class.

Representation of the interface:

use Berlioz\Cli\Core\Console\Environment;

/**
 * Interface CommandInterface.
 */
interface CommandInterface
{
    /**
     * Get description.
     *
     * @return string|null
     */
    public static function getDescription(): ?string;

    /**
     * Get help.
     *
     * @return string|null
     */
    public static function getHelp(): ?string;

    /**
     * Run command.
     *
     * @param Environment $env
     *
     * @return int
     */
    public function run(Environment $env): int;
}

Arguments

Arguments must be declared with PHP 8 attributes, example:

use Berlioz\Cli\Core\Command\Argument;
use Berlioz\Cli\Core\Command\CommandInterface;
use Berlioz\Cli\Core\Console\Environment;

#[Argument('argument1', prefix: 'a', longPrefix: 'arg')]
#[Argument('argument2', longPrefix: 'arg2')]
class MyCommand implements CommandInterface
{
    // ...

    public function run(Environment $env): int
    {
        $env->getArgument('argument1'); // Get the argument 1
        $env->getArgument('argument2'); // Get the argument 2
        
        // ...
    }
}

Options for arguments:

Name Type Description
name string Name of argument
prefix string (default: null) Prefix (one character)
longPrefix string (default: null) Long prefix
description string (default: null) Description, used for --help
defaultValue mixed (default: null) Default value
required bool (default: false) If argument is required
noValue bool (default: false) If argument has no value
castTo string (default: null) Cast to a specified type

Declare a command

You need to declare each commands in a commands.json file in your configuration directory.

Example of file:

{
    "commands": {
        "myproject:foo": "\\MyProject\\Command\\FooCommand",
        "myproject:bar": "\\MyProject\\Command\\BarCommand"
    }
}

Call a command

An executable is available in the binary directory of Composer to call commands.

Examples:

$ cd /my/project/directory
$ vendor/bin/berlioz myproject:foo
Printed result!
$ vendor/bin/berlioz myproject:bar --arg1 "Test" -aze
Printed result of second command!