gone.io/zenderator

此包最新版本(dev-master)没有可用的许可证信息。

安装: 77

依赖: 0

建议者: 2

安全: 0

星星: 0

关注者: 2

分支: 3

开放问题: 0

语言:HTML

dev-master 2019-07-11 12:56 UTC

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`

项目命令

@待办事项 我需要编写这部分。

附加阅读材料与链接