Criando Comandos

Exemplo 1 — Comando simples (sem categoria, sem parâmetro)

Crie o arquivo src/Commands/Hello.php:

<?php
 
namespace App\Commands;
 
use Bypc\Commander;
use Bypc\Core;
 
class Hello extends Commander {
    protected string $name = 'hello';
    protected string $description = 'Exibe uma saudação.';
 
    protected bool $paramRequired = false;
    protected bool $categoryRequired = false;
    protected array $categoriesTrusted = [];
 
    public function handler(Core $tool, string|null $param, string|null $category) {
        $this->checkRulers($param, $category);
 
        echo "Olá, mundo!\n";
    }
}

Registe no seu bypc.php:

use App\Commands\Hello;
 
$tool->setCommand(new Hello());

Uso:

php bypc.php hello
# Olá, mundo!

Exemplo 2 — Comando com parâmetro

<?php
 
namespace App\Commands;
 
use Bypc\Commander;
use Bypc\Core;
 
class Greet extends Commander {
    protected string $name = 'greet';
    protected string $description = 'Saúda uma pessoa pelo nome.';
 
    protected bool $paramRequired = true;
    protected bool $categoryRequired = false;
    protected array $categoriesTrusted = [];
 
    public function handler(Core $tool, string|null $param, string|null $category) {
        $this->checkRulers($param, $category);
        echo "Olá, {$param}!\n";
    }
}

Uso:

php bypc.php greet Lucas
# Olá, Lucas!

Se o usuário omitir o parâmetro, checkRulers() lançará Exception("Param is required.").

Exemplo 3 — Comando com categoria

O padrão comando:categoria permite "variantes" de um mesmo comando — útil para geradores (make:controller, make:seed, etc.).

<?php
 
namespace App\Commands;
 
use Bypc\Commander;
use Bypc\Core;
 
class Make extends Commander {
    protected string $name = 'make';
    protected string $description = 'Gera arquivos do projeto.';
 
    protected bool $paramRequired = true;
    protected bool $categoryRequired = true;
    protected array $categoriesTrusted = ['controller', 'model', 'seed'];
 
    public function handler(Core $tool, string|null $param, string|null $category) {
        $this->checkRulers($param, $category);
 
        switch ($category) {
            case 'controller':
                $this->makeController($param);
                break;
            case 'model':
                $this->makeModel($param);
                break;
            case 'seed':
                $this->makeSeed($param);
                break;
        }
    }
 
    private function makeController(string $name): void {
        $stub = "<?php\n\nclass {$name} {\n    // ...\n}\n";
        file_put_contents(__DIR__ . "/../app/Controllers/{$name}.php", $stub);
        echo "Controller {$name} criado com sucesso.\n";
    }
 
    private function makeModel(string $name): void { /* ... */ }
    private function makeSeed(string $name): void  { /* ... */ }
}

Uso:

php bypc.php make:controller User
# Controller User criado com sucesso.
 
php bypc.php make:model User
# Model User criado com sucesso.

Categorias fora de categoriesTrusted lançam Exception("Invalid category.").

Próximos passos