Console — API
localzet\Console
Заголовок раздела «localzet\Console»new Console(array $config = [], bool $installInternalCommands = true) создаёт Symfony Application с указанными name/version. Если включены internal commands, ищет их по пути пакета, полученному через Composer InstalledVersions.
installInternalCommands() повторяет установку штатного набора. installCommands(string $path, string $namespace = 'app\\command') регистрирует конкретные дочерние классы Localzet Command из каталога; класс должен быть доступен через autoload.
Методы add(), run(), setAutoExit() и работа с Input/Output наследуются от установленной версии Symfony Console. Встроенное input definition добавляет command и стандартные help/quiet/verbose/version/ansi/no-interaction options.
Базовая Command
Заголовок раздела «Базовая Command»new Command(array $config = []) предназначен для наследования, сам класс абстрактный. Имя и описание дочерней команды задаются через protected static $defaultName/$defaultDescription. Можно переопределять Symfony configure() и execute().
| Метод | Поведение |
|---|---|
getDefaultName(): ?string | Непустое static defaultName либо null. |
getDefaultDescription(): ?string | Непустое static defaultDescription либо null. |
config(null) | Весь переданный массив. |
config('a.b', $default) | Вложенное значение; отсутствующее или null заменяется default. |
Lifecycle-команды
Заголовок раздела «Lifecycle-команды»| Команда | Объявленные параметры |
|---|---|
start | --daemon/-d |
stop | --graceful/-g |
restart | --daemon/-d, --graceful/-g |
reload | --graceful/-g |
status | --live/-d |
connections | Без специальных options |
Эти команды скрываются, если не обнаружены support\App и localzet\Server. Их execute делегирует общий entry point: наличие option в Console не гарантирует, что независимый host-проект применяет его так же, как исходный Server.
Конфигурация build
Заголовок раздела «Конфигурация build»| Ключ | Default / смысл |
|---|---|
input_dir | Каталог приложения из контекста PHAR/Composer root, если не задан явно. |
output_dir | <input_dir>/build |
phar_alias | localzet |
phar_filename | localzet.phar |
phar_stub | stub.php; должен существовать во входном каталоге, если непустой. |
exclude_files | Список точных исключений. Заданный список заменяет default. |
exclude_pattern | Regex для включения файлов при buildFromDirectory, а не универсальный .gitignore. |
signature_algorithm | Phar::SHA256 |
private_key_file | Путь к private PEM для Phar::OPENSSL. Не включайте его в архив. |
php_version | 8.3 для BIN; версия преобразуется в float. |
php_ini | memory_limit = 256M для BIN |
bin_filename | localzet |
BuildPharCommand::checkEnv() проверяет PHAR extension и отключённый readonly. getExcludeFiles() объединяет пользовательские исключения с рассчитанными путями файлов команд. Проверьте итоговый состав готового архива: одного regex недостаточно для обнаружения приватных материалов.
Checksum-подпись PHAR не равна подписи доверенного издателя. Для OPENSSL-подписи ключ и его распространение должны иметь отдельную политику.
Команды окружения
Заголовок раздела «Команды окружения»get:php [version] [output] получает runtime с заданного в исходнике CDN и распаковывает zip при наличии ZipArchive. Это сетевая операция с записью файлов; TLS verification в загрузчике отключена.
fix-disable-functions читает php_ini_loaded_file(), удаляет перечисленные сетевые/process функции из disable_functions и записывает php.ini обратно. Команда меняет ограничения окружения; это не read-only диагностика.
localzet\Console\Util
Заголовок раздела «localzet\Console\Util»| Метод | Назначение |
|---|---|
nameToNamespace($name) | Преобразовать slash/hyphen-имя в namespace-подобную строку. |
classToName($class) | Преобразовать верхний регистр в разделённое подчёркиваниями имя. |
nameToClass($name) | Преобразовать дефисы/подчёркивания частей имени в class-подобную форму. |
guessPath($basePath, $name, $returnFullPath = false) | Найти существующую цепочку каталогов без учёта регистра; при отсутствии вернуть false. |
Эти строковые преобразования не валидируют PHP identifier или безопасный путь для создания файла. Не используйте их как защиту от path traversal и не принимайте имя команды из недоверенного ввода для произвольной загрузки класса.