monarc/core

monarc/monarc 应用程序的核心

v2.12.7-p2 2024-02-13 13:14 UTC

README

以下方面的开发笔记

  • 实体
  • 表格
  • 控制器
  • 服务
  • 在 module.config.php 中的容器配置
  • 测试覆盖率

实体

实体的创建应通过简单的对象实例化来完成,例如:

$myEntityClass = (new MyEntityClass())
    ->setName('name')
    ->setCode('codde');

实体应具有单一责任,并且不应自行执行任何数据库相关操作。

注意! 将移除 AbstractEntity 继承,并且清理实体的过滤器方法。

生成迁移文件并与数据库一起迁移,添加/删除/更改列

php ./vendor/bin/doctrine-module migrations:diff
php ./vendor/bin/doctrine-module migrations:migrate

实体表格

在 Model/Table 文件夹中实现表格(仓库)类,并扩展 AbstractTable

在表格构造函数中必须传递一个实体类名,该表格负责管理该实体,例如:

public function __construct(EntityManager $entityManager)
{
    parent::__construct($entityManager, \MyEntityNamespace\MyEntityClass::class);
}

表格方法,负责从数据库获取数据,应从 findBy 前缀开始。AbstractTable 有帮助进行基本实体操作的方法。

  • 保存
  • 删除
  • 等等。

在模块配置文件中,需要定义表类创建的方式。在大多数情况下,它与 Laminas\Di\Container\AutowireFactory 一起工作得很好。

\MyEntityNamespace\MyEntityClass::class => AutowireFactory::class,

控制器

控制器应扩展 Laminas\Mvc\Controller\AbstractRestfulController

需要定义的 Restful 应用程序方法

  • getList()
  • get($id)
  • create($data)
  • update($id, $data)
  • delete($id)

module.config.php 中,控制器通常在工厂容器中定义,如下所示:

ControllerNameSpace\MyController::class => AutowireFactory::class,

服务

注意 新创建的服务类不应扩展 AbstractService,将来将被移除。

在模块配置文件中,服务容器看起来像这样:

ServiceNamescpace\MyService::class => Laminas\Di\Container\AutowireFactory::class,

或者,如果需要注入配置:

ServiceNamescpace\MyService::class => Laminas\ServiceManager\AbstractFactory\ReflectionBasedAbstractFactory::class,

测试覆盖率

部分实现是在 MonarcAppFO 一侧完成的,因为集成和功能测试应该涵盖 MONARC 应用程序的核心和前端办公室模块。

单元测试可以在特定项目的一侧实现。

我们可能会从当前的 Core/FrontOffice 模块方法迁移到库/责任特定的方法,并且测试也将随之迁移。

许可证

本软件根据 GNU Affero 通用公共许可证第 3 版 许可。

有关更多信息,请参阅 作者和贡献者列表

免责声明:本程序分发时希望它将是有用的,但没有任何保证;甚至没有关于其商售性或适用于特定目的的暗示保证。有关详细信息,请参阅 GNU Affero 通用公共许可证。