phpsoftbox / code-generator
Code generator helpers for the PhpSoftBox framework
Requires
- php: ^8.4
- phpsoftbox/cli-app: dev-master
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.93
- phpsoftbox/cs-fixer: ^1.1.0
- phpunit/phpunit: ^11.2
This package is auto-updated.
Last update: 2026-07-02 09:30:38 UTC
README
About
phpsoftbox/code-generator — набор утилит для генерации кода и базовых CLI-команд. Включает AbstractMakeCommandHandler, CodeGenerator, GeneratorTarget и FileWriter.
Quick Start
use PhpSoftBox\CodeGenerator\Cli\AbstractMakeCommandHandler; use PhpSoftBox\CodeGenerator\CodeGenerator; use PhpSoftBox\CodeGenerator\GeneratorTarget; use PhpSoftBox\CliApp\Runner\RunnerInterface; final class MakeFooHandler extends AbstractMakeCommandHandler { protected function missingNameMessage(): string { return 'Имя класса не задано.'; } protected function successMessage(GeneratorTarget $target): string { return 'Создан класс: ' . $target->path; } protected function renderEvent(RunnerInterface $runner, GeneratorTarget $target): string { $generator = new CodeGenerator(); return $generator->renderClass( className: $target->className, namespace: $target->namespace, ); } }
Пример генерации класса с атрибутом:
$generator = new CodeGenerator(); $code = $generator->renderClass( className: 'WelcomeListener', namespace: 'App\\Listeners', uses: [ 'App\\Events\\UserRegistered', 'PhpSoftBox\\Events\\Attributes\\ListenTo', ], classAttributes: ['#[ListenTo(UserRegistered::class)]'], bodyLines: [ 'public function handle(UserRegistered $event): void', '{', '}', ], );
Оглавление
OpenAPI DTO
OpenApiDtoGenerator генерирует DTO-классы и response-map из локальных OpenAPI документов. Он не привязан к конкретному маркетплейсу: компонент-потребитель передает namespace, DTO-интерфейс, value-helper и путь для карты ответов.
use PhpSoftBox\CodeGenerator\OpenApi\OpenApiDtoGenerator; use PhpSoftBox\CodeGenerator\OpenApi\OpenApiDtoGeneratorDocument; use PhpSoftBox\CodeGenerator\OpenApi\OpenApiDtoGeneratorOptions; $result = (new OpenApiDtoGenerator())->generate(new OpenApiDtoGeneratorOptions( documents: [ new OpenApiDtoGeneratorDocument('partner', $openApi), ], dtoDirectory: __DIR__ . '/src/Dto', dtoNamespace: 'App\\Dto', dtoInterface: App\Dto\DtoInterface::class, dtoValueClass: App\Dto\DtoValue::class, responseMapPath: __DIR__ . '/src/Dto/ResponseDtoMap.php', responseMapNamespace: 'App\\Dto', responseMapClassName: 'ResponseDtoMap', normalizePathFunctionName: 'normalizeApiPath', normalizePatternFunctionName: 'normalizeApiPathPattern', generatedComment: 'App OpenAPI DTO', ));
Генератор поддерживает несколько документов за один запуск и изолирует одинаковые schema names по имени документа. Это нужно для спецификаций, где в разных YAML-файлах встречаются одинаковые DTO вроде Error или Order.