PHPackages                             phpsoftbox/code-generator - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. phpsoftbox/code-generator

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

phpsoftbox/code-generator
=========================

Code generator helpers for the PhpSoftBox framework

040PHP

Since Jul 2Pushed 1mo agoCompare

[ Source](https://github.com/phpsoftbox/code-generator)[ Packagist](https://packagist.org/packages/phpsoftbox/code-generator)[ RSS](/packages/phpsoftbox-code-generator/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependenciesVersions (1)Used By (0)

PhpSoftBox CodeGenerator
========================

[](#phpsoftbox-codegenerator)

About
-----

[](#about)

`phpsoftbox/code-generator` — набор утилит для генерации кода и базовых CLI-команд. Включает `AbstractMakeCommandHandler`, `CodeGenerator`, `GeneratorTarget` и `FileWriter`.

Quick Start
-----------

[](#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',
        '{',
        '}',
    ],
);
```

Оглавление
----------

[](#оглавление)

- [Документация](docs/index.md)
- [About](docs/01-about.md)
- [Quick Start](docs/02-quick-start.md)

OpenAPI DTO
-----------

[](#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`.

###  Health Score

22

—

LowBetter than 21% of packages

Maintenance60

Regular maintenance activity

Popularity8

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/0279d150240c97d210034878b0467462246dc14d29b5618157ff6a8be49a50e3?d=identicon)[inspector-who](/maintainers/inspector-who)

---

Top Contributors

[![inspector-who](https://avatars.githubusercontent.com/u/6973963?v=4)](https://github.com/inspector-who "inspector-who (1 commits)")

### Embed Badge

![Health badge](/badges/phpsoftbox-code-generator/health.svg)

```
[![Health](https://phpackages.com/badges/phpsoftbox-code-generator/health.svg)](https://phpackages.com/packages/phpsoftbox-code-generator)
```

###  Alternatives

[monsieurbiz/sylius-menu-plugin

This plugins allows you to manage menus.

1583.1k1](/packages/monsieurbiz-sylius-menu-plugin)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
