gcgov/framework

PHP应用程序的开源框架。包括MongoDB建模系统。


README

马里兰州加勒特县政府的PHP应用程序框架。

该框架可用于生成完整的SSR应用程序或作为REST API。它主要用于内部生成API。使用可用的扩展,可以创建一个无需自定义代码的具有Microsoft Oauth认证的完整API。

入门指南

开始的最简单方法是使用 框架脚手架项目 来启动新的API,以及使用 前端应用程序模板 来启动相应的客户端应用程序。

系统架构

应用程序文件系统

所有在整个生命周期中使用该框架的应用程序都应该使用此文件结构。

/api
├── app
│   ├── app.php
│   ├── constants.php
│   ├── renderer.php
│   ├── router.php
│   ├── cli
│   │   ├── index.php
│   │   ├── local.bat
│   │   ├── local-debug.bat
│   │   └── prod.bat
│   ├── config
│   │   ├── app.json
│   │   └── environment.json
│   ├── controllers
│   │   └── {controller.php}
│   └── models
│       └── {model.php}
└── www
    └── index.php

当你从 框架脚手架项目 开始时,你将自动开始一些额外的文件夹和工具。

/api
│...
├── www
│   │...
│   ├── web.config
│   ├── web-local.config
│   └── web-prod.config
├── app
│   │...
│   └── config
│       └── environment-local.json
│       └── environment-prod.json
├── scripts
│   ├── create-jwt-keys.ps1
│   └── setup.ps1
├── srv
│   ├── {env}
│   │   └── php.ini
│   ├── tmp
│   │   ├── files
│   │   ├── opcache
│   │   ├── sessions
│   │   ├── soaptmp
│   │   └── tmp
│   └── jwtCertificates
├── db
│   ├── backup
│   ├── restore-live-to-local.ps1
│   └── local-createuser.js
├── logs
└── update-production.ps1

核心文件和应用程序命名空间

Web服务器应将请求指向 /www/index.php。需要将原始路径URL重写到url参数 R0

CLI请求应指向 /app/cli/index.php。

框架将注册命名空间 \app/app 目录,并在 /app 根目录中需要三个核心文件。

组件

控制器

\app\controllers

由路由器调用的控制器方法必须返回以下支持的类型之一。它应始终提供响应,并且永远不应手动结束代码执行,以确保整个应用程序生命周期得到执行。

可以通过在 \gcgov\framework\renderer 中添加类型并设置渲染方法,将新的控制器响应类型添加到框架中,以支持新的场景。

  • \gcgov\framework\models\controllerDataResponse
  • \gcgov\framework\models\controllerPagedDataResponse
  • \gcgov\framework\models\controllerFileResponse
  • \gcgov\framework\models\controllerFileBase64EncodedContentResponse
  • \gcgov\framework\models\controllerViewResponse

模型

\app\models

接口

\app\interfaces

异常

\app\exceptions

特质

\app\traits

服务

\app\services

路由

\app\router 方法 getRoutes() 必须返回一个数组,该数组包含映射URL路径到控制器并定义认证要求的 \gcgov\framework\models\route

\gcgov\framework\models\route(
    string|array $httpMethod = '', 
    string $route = '', 
    string $class = '', 
    string $method = '', 
    bool $authentication = false, 
    array $requiredRoles = [], 
    bool $allowShortLivedUrlTokens=false
)

以下路由将映射到 /structureGET 请求,并映射到控制器 \app\controllers\structuregetAll 方法。该路由需要认证,并且用户必须具有角色 Structure.Read 才能执行请求。

new route( 'GET', 'structure', '\app\controllers\structure', 'getAll', true, [ 'Structure.Read' ] );

当通过CLI加载应用程序时,方法将是 CLI 而不是正常的HTTP方法。CLI路由不支持认证。

new route( 'CLI', 'structure/cleanup', '\app\controllers\structure', 'cleanup', false );

请求生命周期

  1. \www\index.php
  2. \app\app::_before()
  3. \app\app::__construct()
  4. \app\router::_before()
  5. \app\router::__construct()
  6. \app\router::route()
  7. \app\router::_after()
  8. \app\renderer::_before()
  9. \app\controllers\{route-controller}::_before()
  10. \app\controllers\{route-controller}::__construct()
  11. \app\controllers\{route-controller}::{route-method}()
  12. \app\controllers\{route-controller}::_after()
  13. \app\renderer::_after()
  14. \app\app::_after()

CLI

使用框架脚手架项目,您可以使用 > app/cli/{env}.bat {url-path} 从CLI运行应用程序。例如: > app/cli/local.bat /structure/cleanup

要启用CLI执行中的XDebug,请运行 > app/cli/local-debug.bat {url-path} 例如: > app/cli/local-debug.bat /structure/cleanup

框架服务

格式化

  1. 清理文件名: \gcgov\framework\services\formatting::fileName( string $fileName, string $replacementForIllegalChars = '-', bool $forceLowerCase = true ): string
  2. 清理 Excel 选项卡名称: \gcgov\framework\services\formatting::xlsxTabName( string $tabName, string $replacementForIllegalChars = ' ', bool $forceLowerCase = false ) : string
  3. 将日期间隔格式化为可读字符串: \gcgov\framework\services\formatting::getDateIntervalHumanText( \DateInterval $interval ) : string

GUID

创建一个 GUID \gcgov\framework\services\guid::create()

HTTP

获取 HTTP 状态码的状态文本 \gcgov\framework\services\http::statusText( int $code )

日志记录

\gcgov\framework\services\log 将自动创建并附加一个位于 /logs 的日志,文件名等于通道

  • 调试 \gcgov\framework\services\log::debug( string $channel, string $message, array $context = [] )
  • 信息 \gcgov\framework\services\log::info( string $channel, string $message, array $context = [] )
  • 注意 \gcgov\framework\services\log::notice( string $channel, string $message, array $context = [] )
  • 警告 \gcgov\framework\services\log::warning( string $channel, string $message, array $context = [] )
  • 错误 \gcgov\framework\services\log::error( string $channel, string $message, array $context = [] )
  • 关键 \gcgov\framework\services\log::critical( string $channel, string $message, array $context = [] )
  • 警报 \gcgov\framework\services\log::alert( string $channel, string $message, array $context = [] )
  • 紧急 \gcgov\framework\services\log::emergency( string $channel, string $message, array $context = [] )

JWT 认证 & 证书

\gcgov\framework\services\jwtAuth\jwtAuth() 提供所有 JWT 认证机制。在推出新的认证解决方案之前,探索 Oauth 服务器服务Microsoft 认证令牌交换 扩展。

Microsoft 服务

已弃用 - 使用 https://github.com/andrewsauder/microsoftServices 代替

MongoDB

综合数据库建模系统 \gcgov\framework\services\mongodb

PDODB

使用 app/config/environment.json 中的 SQL 连接详情启动 PDO 连接。它仅是原生 PDO 类的一个小封装。

读取用户连接: new gcgov\framework\services\pdodb\pdodb(true, $databaseName)

写入用户连接: new gcgov\framework\services\pdodb\pdodb(false, $databaseName)

扩展

扩展向注册它们的程序添加服务或应用程序级别的功能。扩展可能暴露新的端点。