openclassrooms / code-generator
库
Requires
- php: >=7.4
- composer/composer: ~1.8
- doctrine/annotations: ~1.6
- doctrine/inflector: ~1.3
- fzaninotto/faker: ^1.8
- incenteev/composer-parameter-handler: ~2.0
- nesbot/carbon: ~1.22 || ~2.1
- openclassrooms/cache: 1.0.x@dev
- openclassrooms/use-case: 1.0.x@dev
- symfony/config: ~3.3 || ~4.0
- symfony/console: ~3.3 || ~4.0
- symfony/dependency-injection: ~3.3 || ~4.0
- symfony/filesystem: ~3.3 || ~4.0
- symfony/finder: ~3.3 || ~4.0
- symfony/yaml: ~3.3 || ~4.0
- twig/twig: ^1.38 || ^2.7
Requires (Dev)
- friendsofphp/php-cs-fixer: 2.*
- phpunit/phpcov: ~5.0
- phpunit/phpunit: ~7.5
- rector/rector-prefixed: ^0.10.3
This package is auto-updated.
Last update: 2024-09-11 22:38:26 UTC
README
CodeGenerator 是一个在 Clean Architecture 环境中生成类的库。
从任何用例响应中,开发者都可以生成
- 通用用例架构
- 实体用例获取架构
- 实体用例获取架构
- 创建实体用例架构
- 删除实体用例架构
- ViewModel 架构
- 控制器和模型类
- 为每个生成的类创建单元测试
安装
安装 CodeGenerator 最简单的方式是通过 composer。
创建以下 composer.json
文件或运行 php composer.phar install
命令来安装。
composer require --dev openclassrooms/code-generator *
或
{ "require": { "openclassrooms/code-generator": "*" } }
在 composer.json
的脚本部分设置 post-install 和 post-update 钩子,以生成默认配置的 oc_code_generator.yml
文件。此文件对于代码生成器的运行是必需的。
{ "scripts": { "post-install-cmd": [ "OpenClassrooms\\CodeGenerator\\Composer\\ParameterHandler::createGeneratorFileParameters" ], "post-update-cmd": [ "OpenClassrooms\\CodeGenerator\\Composer\\ParameterHandler::createGeneratorFileParameters" ] } }
该脚本将在项目的根目录创建一个名为 oc_code_generator.yml
的文件,并会交互式地询问缺失的参数,使用 dist 文件中的值作为默认值,如下所示
parameters: api_dir: 'ApiBundle\' app_dir: 'AppBundle\' base_namespace: 'OC\' stub_namespace: 'Doubles\OC\' tests_base_namespace: 'OC\' entity_util_classname: 'OC\Util\EntityUtil' security_classname: 'OpenClassrooms\UseCase\Application\Annotations\Security' transaction_classname: 'OpenClassrooms\UseCase\Application\Annotations\Transaction' use_case_classname: 'OpenClassrooms\UseCase\BusinessRules\Requestors\UseCase' use_case_request_classname: 'OpenClassrooms\UseCase\BusinessRules\Requestors\UseCaseRequest' paginated_collection_builder_impl: 'OpenClassrooms\UseCase\Application\Entity\PaginatedCollectionBuilderImpl' paginated_collection_classname: 'OC\BusinessRules\Entities\PaginatedCollection' paginated_collection_factory: 'OC\AppBundle\Repository\PaginatedCollectionFactory' paginated_use_case_response_classname: 'OC\BusinessRules\Responders\PaginatedUseCaseResponse' paginated_use_case_response_builder_classname: 'OC\BusinessRules\Responders\PaginatedUseCaseResponseBuilder' use_case_response_classname: 'OC\BusinessRules\Responders\UseCaseResponse' pagination_classname: 'OC\BusinessRules\Gateways\Pagination' abstract_controller : 'OC\ApiBundle\Framework\FrameworkBundle\Controller\AbstractApiController' collection_information : 'OC\ApiBundle\ParamConverter\CollectionInformation'
您可能需要根据您使用的项目调整这些值。
使用方法
基本执行
列出所有命令
php bin/code-generator
生成视图模型架构
php bin/code-generator code-generator:view-models useCaseResponseClassName
生成通用用例架构
php bin/code-generator code-generator:generic-use-case
or
php bin/code-generator code-generator:generic-use-case Domain\\SubDomain UseCaseName
生成实体 CRUD 用例架构
# Create: php bin/code-generator code-generator:create-entity-use-case EntityClassName # Delete: php bin/code-generator code-generator:delete-entity-use-case EntityClassName # Edit: php bin/code-generator code-generator:edit-entity-use-case EntityClassName # Get all: php bin/code-generator code-generator:get-entities-use-case EntityClassName # Get: php bin/code-generator code-generator:get-entity-use-case EntityClassName
扩展
无测试生成
php bin/code-generator code-generator:view-models useCaseResponseClassName --no-test
仅当视图模型类已存在时生成视图模型架构测试
php bin/code-generator code-generator:view-models useCaseResponseClassName --tests-only
为视图模型类生成预览
php bin/code-generator code-generator:view-models useCaseResponseClassName --dump
在 PHPStorm 中使用代码生成器
您可以在 PHPStorm 中设置外部工具条目,以便通过在项目树中的类(例如,实体类)上右键单击来从 IDE 运行一些代码生成器命令。
对于通用用例生成,添加一个外部工具条目,如下所示
程序: /usr/local/bin/php 参数: bin/code-generator code-generator:generic-use-case 工作目录
对于获取实体用例生成,添加一个外部工具条目,如下所示
程序: /usr/local/bin/php 参数: bin/code-generator code-generator:get-entity-use-case 工作目录
请注意,这只有在代码生成器在项目的 composer.json
中正确设置的情况下才会工作。您可能需要根据您本地的 PHP 二进制路径进行调整。
如何创建一个新的生成器
要了解
- 在骨架目录中,通过骨架描述生成文件。
- 生成器获取数据并将其发送到骨架(就像网页一样)。
- 生成器必须只生成一个文件。
- 中介负责调用不同的生成器。
- 中介可以调用许多其他中介。
- 命令必须调用中介。
- 每个类必须有一个接口及其实现。
- FileObject 包含生成文件所需的所有类信息。
- 工厂用于从领域和实体名称创建 FileObject。
- 实体名称和领域从 ClassNameUtility 特性中获取。
- 如果您在生成器中需要其他类信息,请使用工厂创建所需的 FileObject。
- 一些实用类用于生成存根、常量和其他内容。
- 在视图模型命令中,如果使用情况响应类的名称包含基本命名空间,生成器在需要时使用它。
方法论
1) 编写要生成的文件模板
首先,您必须为生成后预期的文件创建twig模板。
2) 创建生成器RequestDTO和生成器RequestBuilder
创建一个类,其名称以RequestBuilder
结尾,这用作生成器主方法中的参数。
3) 启动生成器实现
生成器类的主要目标是生成预期的FileObject,但要成功,需要从工厂构建其他FileObject并使用可用的实用工具。
4) 创建生成器测试
创建一个以GeneratorTest
结尾的类和相关的存根类(以FileObjectStub1
结尾的实体名称)。存根必须包含用于与实际对象比较的预期值。
5) 创建skeletonModel和SkeletonModelAssembler
创建两个类,都以前缀实体名称开始
- 首先是一个抽象类
SkeletonModel
, - 其次
SkeletonModelAssembler
,两者都用于创建将在模板中使用的对象。
6) 创建中介或向现有中介添加生成器
该命令使用中介模式根据功能组生成类。将新生成器添加到相关组并更新中介配置。
7) 创建配置文件并更新services.xml
为生成器创建一个新的.xml
文件并将其添加到src/Resources/config/service.xml
。
8) 如果不存在,则创建命令
在src/Commands
中创建您的命令,并在execute
方法中调用中介的mediate
函数。
查看示例
对于实际示例,检查如何构建src/Generator/ViewModelGenerator.php
。