gcgov / framework
PHP应用程序的开源框架。包括MongoDB建模系统。
Requires
- php: >=8.1
- ext-fileinfo: *
- ext-mongodb: *
- ext-pdo: *
- andrewsauder/json-deserialize: ^2.5
- guzzlehttp/guzzle: ^7.0
- hybridauth/hybridauth: ^3.8
- lcobucci/clock: ^2.0
- lcobucci/jwt: ^4.0
- microsoft/microsoft-graph: ^1.25
- mongodb/mongodb: ^1.8
- monolog/monolog: ^3.4
- nikic/fast-route: ^1.3
- phpmailer/phpmailer: ^6.2
- swaggest/json-diff: ^3.11
- symfony/expression-language: ^6.2
- symfony/property-access: ^6.2
- symfony/validator: ^6.2
- thenetworg/oauth2-azure: ^2.1
- zircote/swagger-php: ^4.7.9
- dev-main
- v4.1.4
- v4.1.3
- v4.1.2
- v4.1.1
- v4.1.0
- v4.0.6
- v4.0.5
- v4.0.4
- v4.0.3
- v4.0.2
- v4.0.1
- v4.0.0
- v3.1.5
- v3.1.4
- v3.1.3
- v3.1.2
- v3.1.1
- v3.1.0
- v3.0.1
- v3.0.0
- v2.4.2
- v2.4.1
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.1
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0.0
- v2.0.0-alpha
- v1.14.1
- v1.14.0
- v1.13.0
- v1.12.3
- v1.12.2
- v1.12.1
- v1.12.0
- v1.11.2
- v1.11.1
- v1.11.0
- v1.10.2
- v1.10.1
- v1.10.0
- v1.9.0
- v1.8.7
- v1.8.6
- v1.8.5
- v1.8.4
- v1.8.3
- v1.8.2
- v1.8.1
- v1.8.0
- v1.7.0
- v1.6.4
- v1.6.3
- v1.6.2
- v1.6.1
- v1.6.0
- v1.5.4
- v1.5.3
- v1.5.2
- v1.5.1
- v1.5.0
- v1.4.1
- v1.4.0
- v1.3.10
- v1.3.9
- v1.3.8
- v1.3.7
- v1.3.6
- v1.3.5
- v1.3.4
- v1.3.3
- v1.3.2
- v1.3.1
- v1.3.0
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.0
- dev-production
- dev-newaudit
- dev-feature-mdb-simplification
- dev-migrate-mdb
This package is auto-updated.
Last update: 2024-09-28 02:41:03 UTC
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 )
以下路由将映射到 /structure
的 GET
请求,并映射到控制器 \app\controllers\structure
的 getAll
方法。该路由需要认证,并且用户必须具有角色 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 );
请求生命周期
\www\index.php
\app\app::_before()
\app\app::__construct()
\app\router::_before()
\app\router::__construct()
\app\router::route()
\app\router::_after()
\app\renderer::_before()
\app\controllers\{route-controller}::_before()
\app\controllers\{route-controller}::__construct()
\app\controllers\{route-controller}::{route-method}()
\app\controllers\{route-controller}::_after()
\app\renderer::_after()
\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
框架服务
格式化
- 清理文件名:
\gcgov\framework\services\formatting::fileName( string $fileName, string $replacementForIllegalChars = '-', bool $forceLowerCase = true ): string
- 清理 Excel 选项卡名称:
\gcgov\framework\services\formatting::xlsxTabName( string $tabName, string $replacementForIllegalChars = ' ', bool $forceLowerCase = false ) : string
- 将日期间隔格式化为可读字符串:
\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)
扩展
扩展向注册它们的程序添加服务或应用程序级别的功能。扩展可能暴露新的端点。
- 开放 API 文档
gcgov/framework-service-documentation
- https://github.com/gcgov/framework-service-documentation
- 将命名空间
\gcgov\framework\services\documentation
添加到\app\app->registerFrameworkServiceNamespaces()
- Microsoft 认证令牌交换
gcgov/framework-service-auth-ms
- https://github.com/gcgov/framework-service-auth-ms-front
- 将命名空间
\gcgov\framework\services\authmsfront
添加到\app\app->registerFrameworkServiceNamespaces()
- Oauth 服务器服务
gcgov/framework-service-auth-oauth-server
- https://github.com/gcgov/framework-service-auth-oauth-server
- 将命名空间
\gcgov\framework\services\authoauth
添加到\app\app->registerFrameworkServiceNamespaces()
- 用户 CRUD
gcgov/framework-service-user-crud
- https://github.com/gcgov/framework-service-user-crud
- 将命名空间
\gcgov\framework\services\usercrud
添加到\app\app->registerFrameworkServiceNamespaces()
- 计划任务监控器
gcgov/framework-service-gcgov-cron-monitor
- https://github.com/gcgov/framework-service-gcgov-cron-monitor/
- 将命名空间
gcgov\framework\services\cronMonitor
添加到\app\app->registerFrameworkServiceNamespaces()