Kleine CLI-Dispatcher-Library für PHP.
<?php
require __DIR__ . "/vendor/autoload.php";
use Phore\Cli\CliDispatcher;
use Phore\Cli\Annotation\CliParameter;
class App
{
public function greet(
#[CliParameter("name", "Name der Person")]
string $name
): void {
echo "Hallo {$name}!\n";
}
}
CliDispatcher::addClass(App::class);
CliDispatcher::run($argv);Aufruf:
php app.php app greet --name Matthiasexamples/creating-actions.php– Actions mit der statischenCliDispatcher-APIexamples/shared-scopes.php– gemeinsamer Scope, CLI-Optionsname und eigeneCliApplicationexamples/helper-in.php– Eingaben mitPhore\Cli\Input\Inexamples/helper-out.php– formatierte Ausgabe mitPhore\Cli\Output\Outexamples/helper-nc.php– einfache TUI-Helfer mitPhore\Cli\Ncurses\Ncexamples/helper-clipreset.php– Presets mitPhore\Cli\CliPreset
Phore\Cli\CliDispatcher– registriert Command-Gruppen und startet das DispatchingPhore\Cli\Annotation\CliParameter– beschreibt CLI-ParameterPhore\Cli\Input\In– interaktive EingabenPhore\Cli\Output\Out– Text- und Tabellen-AusgabePhore\Cli\CliPreset– lädt Presets auscli_presets.iniPhore\Cli\Ncurses\Nc– einfache terminalbasierte Form-/Tabellen-Helfer
Weitere Übersicht: .ai-usage-info.md
CliApplication verwaltet eine eigene Command-Registry. run() nimmt wie
CliDispatcher::run() ein argv einschließlich Programmname entgegen und
liefert die Konsolenausgabe als String. Fehler werden als Exceptions an den
Aufrufer weitergegeben. Die bisherigen statischen CliDispatcher-Aufrufe
funktionieren weiterhin und schreiben die Ausgabe direkt auf die Konsole.
use Phore\Cli\Annotation\CliParameter;
use Phore\Cli\Annotation\CliScope;
use Phore\Cli\CliApplication;
#[CliScope('project')]
class ProjectCreate
{
public function create(
#[CliParameter('template-dir')] string $templateDir
): void {
echo "Template: {$templateDir}";
}
}
#[CliScope('project')]
class ProjectStatus
{
public function status(): void
{
echo 'Ready';
}
}
$app = new CliApplication();
$app->addClass(ProjectCreate::class);
$app->addClass(ProjectStatus::class);
echo $app->run(['tool', 'project', 'create', '--template-dir=/tmp/basic']);Ergebnis: Template: /tmp/basic. Ohne CliScope bleibt der kleingeschriebene
Klassenname der Gruppenname. Jede Action verwendet den Konstruktor ihrer
eigenen Klasse. Doppelte Action-Namen im selben Scope und widersprüchliche
Typen gleichnamiger Scope-Optionen führen bei der Registrierung zu einem
Fehler. CliParameter benennt nur die CLI-Option um; die Bindung an den
PHP-Parameter erfolgt weiterhin über dessen PHP-Namen.
Nach composer install führt composer test die PHPSpec-Specs aus
(vendor/bin/phpspec run).