gone.io / zenderator
Requires
- php: ^7.1
- deweller/cliopts: ^1.0
- gone.io/appcore: *
- gone.io/inflection: ^2.0
- gone.io/testing: *
- gone.io/twig-extension-inflection: ^1.0
- gone.io/twig-extension-transform: ^1.0
- gone.io/uuid: ^2.2
- guzzlehttp/guzzle: ^6.3.3
- jimmiw/php-time-ago: ^0.4.11
- mattketmo/camel: ^1.1
- monolog/monolog: ^1.19.0
- predis/predis: ^1.0
- slim/slim: ^3.2
- slim/twig-view: ^2.1
- twig/extensions: ^1.3
- zendframework/zend-db: ^2.7
- zeuxisoo/slim-whoops: ^0.5.0
This package is auto-updated.
Last update: 2024-09-12 00:19:19 UTC
README
概述
Zenderator是一个基于现有架构生成资源的机制。之所以命名为如此,是因为它很大程度上基于Zend DB。
生成的资源
Zenderator可以可选地生成以下资源:
- 模型
- 控制器
- 服务
- 路由
- API端点
- 上述资源的依赖注入条目
- 单元测试(模型/服务/API)
您可以通过在项目内部配置zenderator.yml
来配置它生成哪些资源。
代码标准
Zenderator在运行过程中执行的其他进程之一是强制执行psr2
和其他一些编码标准。它是通过对其生成的代码以及在其模型/控制器/等其他地方编写的代码运行一些自动化脚本来实现的。
除了PSR2标准之外,还运行了另一套自动化清理工具。这些工具做一些类似的事情,比如
- 从类中删除未使用的
use
语句,并按字母顺序排列剩余部分。 - 例如,对大数组块中的等于号和双箭头进行对齐。
- 清理PHPDocBlocks以匹配由Symfony引入的标准。
基本原理
Zenderator的目的是完成两个关键任务:
- 提供通用的模型/控制器/服务/表网关及其相关测试,以构建新的、更复杂的功能。
- 提供一个基座App模型(
Zenderator\App
),以构建现代PHP Web应用程序,并使开发者能够使用他们认为适合的任何工具。
基座App
Zenderator提供了一个基座应用程序,可以在此基础上构建其他应用程序。在这个基座中提供了以下内容:
- Composer
- Slim
- Pimple DI
- Redis(通过Predis/Predis)
- Twig
- Faker:伪造数据源。为所有可能的数据项都提供了提供者。
- MonoLog:受支持的日志工具(默认情况下通过Redis进行管道传输)
- EventLoggerService:一个更复杂的日志器,旨在捕获模型的变化,并记录哪个用户修改了模型。一个示例用法是追踪谁做了破坏性的更改。
- Differ:与EventLoggerService部分相关 - 此工具提供了两个字符串之间的git风格diff。
除了Composer、Slim和Pimple DI之外,任何这些选择都可以通过替换DI中的它们或简单地从DI中不调用它们来覆盖或删除。替换DI中的元素就像扩展基座应用程序以创建自己的应用程序容器,并将其他内容写入$this->container[]
中的任何元素一样简单。
模型生成
模型由两个组件组成。一个模型对象和一个TableGateway对象,符合Zend风格。在这种情况下,模型只负责模型数据,不负责将数据打包进数据库和从数据库中解包。这个打包的责任属于TableGateway。
模型中生成了一些便利函数,如->save()
和->destroy()
,实际上只是TableGateway功能的包装,以执行相同的功能。
提供了一个Model::factory()
函数,以及生成模型设置器以便它们在上下文中返回$this
,这样在创建新对象时就可以执行设置器链式调用。
$example = ExampleModel::factory()
->setThing(...)
->setDifferentThing(...)
->setAnother(...)
->save();
架构询问
为了生成模型和服务,数据库必须首先被查询。对于每个表,必须创建一个模型。对于每个模型,每个列都被转换成该模型的一个属性。
在数据库中标记为 主键
的属性将在模型中作为主键列出。可以使用 Model::getPrimaryKeys()
获取主键列表。
标记为 自动增长
的属性需要单独处理,在一些测试中处理方式不同。例如,当保存一个带有 null 参数的对象,这些参数也是自动增长的,我们必须在保存后把这些字段写回对象中,然后再将其返回给调用保存的代码。这样,在保存时,对象会根据 MySQL 的正确值进行变异。
用于在两个对象之间建立关系的属性也将生成一个 fetchXYZ()
函数,该函数允许你根据表关系中的 id 获取相关模型。
模型/表网关/服务生成
// TODO
通用控制器
所有由 Zenderator 生成的其他控制器都从一个基类继承而来,该基类提供了一个基本的功能集,为开发者提供了 CRUD 回调。基本功能在 Zenderator\Abstracts\CrudController
中,并提供以下函数,这些函数可以在具体类实现中进行覆盖。
- 列表:
GET /v1/example
默认情况下将获取所有示例实例。调用Controller::listRequest
。 - 创建:
PUT /v1/example
将创建一个新的示例实例。调用Controller::createRequest
。 - 获取:
GET /v1/example/44
将获取实例 #44,其中 id=44。调用Controller::getRequest
。 - 删除:
DELETE /v1/example/44
将删除实例 #44。调用Controller::deleteRequest
。
测试生成
Zenderator 会生成单元测试,目标是 95%+ 的覆盖率。对于生成资产的理想目标覆盖率是 100%。
Zenderator 测试是用 PHPUnit 编写的。PHPUnit 是 Zenderator 的依赖项。
所有 Zenderator 测试都应该从 Zenderator\Test\BaseTestCase
继承,或者如果测试需要通过 API 进行集成测试,则从 Gone\AppCore\Test\RoutesTestCase
继承。
测试应在 tearDown()
函数中清理自身,以避免在数据库或其他存储(如磁盘、redis)中留下垃圾数据。Zenderator 测试默认通过在一个测试析构函数中回滚事务来实现这一点,该事务包含所有 SQL 查询。
运行测试
默认情况下,运行测试非常简单,假设你的 phpunit.xml/phpunit.xml.dist 已经正确配置。
`./vendor/bin/phpunit`
API 测试
可以在不首先启动服务器和针对 API 运行 curl 请求的情况下测试 API。相反,我们可以创建 PSR7 消息 并将其发送到 Slim 路由器,使其以类似于连接 Apache 的方式响应。这可以在 Gone\AppCore\Test\RoutesTestCase
中的 request()
函数中看到。
用法
为了帮助使用它,包含了一个名为 Automize
的工具。
Zenderator
要运行 zenderator,可以像下面这样调用 Zenderator:
`./vendor/bin/zenderator`
或通过 Automize
`./vendor/bin/automize -z
or
./vendor/bin/automize --zenderator`
代码库清理器
包含了一个工具,用于将源代码清理到符合 PSR2 标准的形式,以及执行修剪未使用的 USE 语句等任务。要运行 zenderator,可以像下面这样调用:
`./vendor/bin/clean`
或通过 Automize
`./vendor/bin/automize -c
or
./vendor/bin/automize --clean`
Automize 高级版
运行 Zenderator,清理代码,运行测试
`./vendor/bin/automize -zct --stop-on-error`
本指令将运行Zenderator,然后运行Clean,接着运行PHPUnit,并在首次出现错误时停止。
这相当于
`./vendor/bin/automize --zenderator --clean --tests-no-cover --stop-on-error`
项目命令
@待办事项 我需要编写这部分。
附加阅读材料与链接
- Faker - 我们使用Faker来生成测试或模拟数据,例如在创建测试用的模拟对象时。
- Predis/Predis
- PHPUnit
- PSR2 编码标准 - PSR2标准的介绍。
- PSR4 自动加载器 - Zenderator和Co使用的自动加载格式,仅在此处列出以完善信息
- PSR7 消息
- Twig - 我们使用twig用于泛型化对象模板。
- Slim
- Pimple 依赖注入 - Pimple用于我们的依赖注入,并且作为Slim 3.x的依赖项与我们同行。
- Zend 数据库