You are reading the documentation for the 1.x version. Switch to the current version 2.x.

Commands

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\CliCore\Command\CommandInterface interface or extends \Berlioz\CliCore\Command\AbstractCommand abstract class.

Representation of interface:

/**
 * Interface CommandInterface.
 *
 * @package Berlioz\CliCore\Command
 */
interface CommandInterface
{
    /**
     * Get short description.
     *
     * @return string|null
     */
    public static function getShortDescription(): ?string;

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

    /**
     * Get options.
     *
     * Must return an array of options.
     *
     * @return \GetOpt\Option[]
     * @see http://getopt-php.github.io/getopt-php/options.html
     */
    public static function getOptions(): array;

    /**
     * Get operands.
     *
     * Must return an array of operands.
     *
     * @return \GetOpt\Operand[]
     * @see http://getopt-php.github.io/getopt-php/operands.html
     */
    public static function getOperands(): array;

    /**
     * Run command.
     *
     * @param \GetOpt\GetOpt $getOpt
     *
     * @return void
     */
    public function run(GetOpt $getOpt);
}

Use arguments

Berlioz commands uses ulrichsg/getopt-php composer package to manage CLI arguments. So to use arguments, \Berlioz\CliCore\Command\CommandInterface::getOptions() method must return an array of \GetOpt\Option objects.

Example:

public static function getOptions(): array
{
    return [
        (new Option('f', 'filter', GetOpt::OPTIONAL_ARGUMENT))
            ->setDescription('Filter')
            ->setValidation('is_string'),
        (new Option(null, 'nb', GetOpt::OPTIONAL_ARGUMENT))
            ->setDescription('Number of results')
            ->setValidation('is_numeric')
    ];
}

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!

Last updated: Thu, 18 Sep 2025 16:20