phiconsultors / gcf
通用企业框架
Requires
- php: >=8.2
- ext-bcmath: *
- ext-dom: *
- ext-gearman: *
- ext-iconv: *
- ext-interbase: *
- ext-intl: *
- ext-json: *
- ext-ldap: *
- ext-libxml: *
- ext-mbstring: *
- ext-pdo: *
- ext-redis: *
- ext-soap: *
- ext-sockets: *
- ext-sqlite3: *
- ext-zip: *
- laminas/laminas-config: 3.*
- laminas/laminas-http: 2.*
- laminas/laminas-json: 3.*
- laminas/laminas-log: 2.*
- laminas/laminas-session: 2.*
- mpdf/mpdf: 8.2.*
- php-amqplib/php-amqplib: 2.*
- phpoffice/phpspreadsheet: ^2.2
- textcontrol/textcontrol-reportingcloud: ^4.0
- twig/intl-extra: ^3.7
- twig/twig: ^3.0
Requires (Dev)
- phpunit/phpunit: 11.*
This package is auto-updated.
Last update: 2024-09-25 16:58:34 UTC
README
简介
这是一个使用其他框架(如Laminas、twig等)来解决PHP中某些业务问题的最小化框架。定义数据库层,如DataMappers,将其映射到数据库表和PDO出现之前开发的数据库抽象层。
这个库是业务应用程序的一部分,目前处于独立库的开发阶段。
功能
-
应用程序配置层
-
数据库支持
- 抽象BD驱动层,包括
- Firebird
- Oracle
- SQLAnywere
- PostgreSQL
- 实体数据模型抽象层:DataMapper、Record和ResultSet。
- 抽象BD驱动层,包括
-
使用K-V存储(REDIS、MEMCACHED)的数据存储模型抽象层。
-
数据导出功能,可以定义不同的输出格式的DataReport:XSL、JSON或PDF。
-
任务抽象层以执行作业服务器上的任务,实际版本仅支持Gearman。
-
集成缓存到:REDIS、Memcached或基于文件。
-
网络层实用工具
- 控制器类
- 模板引擎:支持多个模板库,现在支持twig和patTemplate。
- API REST实现控制器
此外,还包含用于连接到ImesD Electrónica生物识别终端系统的驱动程序,支持的型号包括
- CP-5000
- CP-6000
使用库
这个库是composer包,可在packagist.org包仓库中找到。可以从您的当前应用程序中使用它,或者可以使用此框架创建Web应用程序。
composer require phiconsultors/gcf
创建GCF应用程序
您需要初始化composer项目应用程序,然后执行composer require
composer init
composer require phiconsultors/gcf
现在您需要创建类似于以下的基本应用程序结构
Myapp
│ composer.json
│ init.php
├───cfg
│ └───properties_dev.ini
├───app
├───data
│ └───models
└───frontal
│ index.php
│
├───cfg
├───modules
├───static
│ ├───css
│ ├───img
│ └───jscript
└───templates
index.twig
在包含init.php以初始化应用程序环境的根目录。在此示例中,只有一个简单的index.php,它初始化配置环境并渲染简单的TWIG模板。
<?php /** * Application initialization */ use gcf\Environment; include __DIR__."/vendor/autoload.php"; try { $env = Environment::getInstance("MyAppName"); } catch (Exception $ex) { die($ex->getMessage()); }
此文件包含在主php(例如:index.php)程序中,用于初始化GCF上下文。
以及composer.json,其中包含项目依赖项和一般配置。此文件由composer init自动生成
{ "name": "tomeu/myapp", "description": "Example application", "type": "project", "license": "GPL", "authors": [ { "name": "Tomeu Capó", "email": "tomeucapo@gmail.com" } ], "minimum-stability": "stable", "require": {} }
如果您需要应用程序骨架,可以克隆应用程序示例。
基本用法
您可以在不初始化环境和配置的情况下使用此库的一些组件/类。但是,如果您需要创建具有数据库访问和缓存的程序,则需要创建环境和配置。环境读取包含所有应用程序属性的配置ini文件,并初始化所有数据库连接池和缓存连接。
-
环境
单例类,用于创建应用程序基本上下文,根据环境部署名称解析应用程序属性文件,并初始化数据库连接池属性(connectionDb)(用户、密码等)。
-
ConfiguratorBase
这是一个抽象类,您需要在应用程序的app目录中创建自己的Configurator类,扩展它,并添加应用程序所需的方法。
数据库驱动程序
根据您的应用程序属性,GCF选择与数据库后端一起工作的数据库驱动程序。
您可以使用SQL语句使用
- SQLQuery类执行任何SQL语句到您的数据库。
或创建数据库上的自己的模型,使用模型抽象数据层
- DataMapper类将数据库表映射到PHP类,该类对DB表执行操作。
- Record类将单个表记录存储在其中。
- ResultSet类。迭代器类类型,您可以使用foreach迭代,并在foreach的每个步骤中按记录获取记录。
查询
要直接执行任何查询,可以调用SQLQuery类并处理结果,如下所示
$myQuery = new SQLQuery($db); $myQuery->fer_consulta("select ID, USER, NAME from user where id=3"); while(!$consulta->Eof()) { $user = $consulta->row['USER']; $name = $consulta->row['NAME']; $consulta->Skip(); } $consulta->tanca_consulta();
这是一个传统的使用原语获取记录直到表末的方法。
db 是一个 DatabaseConnector 类型,可以从扩展自 ConfiguratorBase 的 Configurator 类中获取,使用 Configurator::getInstance()->db。
另一种方法是使用 ResultSet,简化代码。
$myQuery = new SQLQuery($db); $myQuery->PrepareQuery("select ID, USER, NAME from user where id=3"); foreach (new ResultSet($myQuery, "ID") as $record) { // Can access each field with, for example: $record->USER or $record->NAME and so on. }
通常建议创建自己的 ResultSet 和自己的 Record,以准确定义每条记录的字段和返回当前 ResultSet 记录的正确类型。
模型
通常,如果您需要处理您的表,我建议为每个表创建一个模型。每个模型直接扩展到 DataMapper,或者类扩展 DataMapper。当您使用主数据库连接创建应用程序时,建议创建一个主基类(例如:MyAppDatabaseModel),它扩展 DataMapper 如下所示
class MyAppDataMapper extends DataMapper { /** * @var DatabaseConnector */ protected DatabaseConnector $dbContext; /** * @throws errorDatabaseConnection * @throws errorDriverDB * @throws errorDatabaseAutentication */ public static function GetDBContext() : DatabaseConnector { $dbPool = connectionPool::getInstance(); return $dbPool->maindbname->getConnection(); } /** * Data\models\taulaBDPersonal constructor. * @param string $tableName * @param mixed $pk * @param mixed $pkType * @throws errorDatabaseAutentication * @throws errorDatabaseConnection * @throws errorDriverDB */ public function __construct(string $tableName, $pk, $pkType) { $this->dbContext = self::GetDBContext(); parent::__construct($this->dbContext, $tableName, $pk, $pkType); }
如果您需要创建模型
class User extends MyAppDataMapper { public function __construct($tableName="USER", $pk="ID", $pkType="int") { parent::__construct($tableName, $pk, $pkType); } }
pk 定义一个单字段主键,pyType 是类型(支持 int 或字符串)。如果您有复合键,您需要将字段名称和类型的数组传递给 pk 和 pkType 这两个参数。
请注意,DataMapper 使用魔法方法来访问表中的每个字段。因此,您需要在类声明之前放置注释,包含属性列表,以帮助 IDE 检测。
/** * Class User * @property int ID * @property string USER * @property string NAME */ class User extends MyAppDataMapper { public function __construct($tableName="USER", $pk="ID", $pkType="int") { parent::__construct($tableName, $pk, $pkType); } }
要从代码的任何部分使用此模型,可以这样做,在 USER 表上创建新记录
$user = new User(); $user->ID = 3; $user->USER = "tomeu"; $user->NAME = "Tomeu Capó"; $user->Nou();
或使用此方法根据 PK 删除记录
$user = new User(); $user->Borra(3);
或使用此方法使用 PK 修改记录
$user = new User(); $user->NAME="Pep"; $user->Modifica(3);
模块
GCF 是模型-视图-控制器框架,可以帮助创建任何 API 控制器、Web 控制器、视图(模板)和模型,如前所述。模块定义了控制器部分。类 modulBase 和 controllerBase 定义了此功能,并帮助创建所需的控制器。要使用模块,您需要实例化 Router 来管理对模块的请求。
controllerBase
此类定义了控制器基类。这是能够为应用程序创建新控制器的基本类。此类不支持视图,仅支持基本控制器,如 API 控制器。如果需要,提供数据库连接上下文、日志上下文、应用程序配置上下文和基本过滤器输入类,其中包含来自客户端的数据。
modulBase
从 controllerBase 扩展并包含模板(视图)功能。通常,当您创建返回从数据库数据解析的动态 HTML 的视图时,使用 modulBase。
- modulBaseCRUD 定义特定数据库模型(表)的所有方法。
- modulConfig 可以加载控制器的 json 配置文件。
- modulBaseDefaultMethods 在控制器上创建所需的控制器接口的占位符方法。仅适用于某些特殊情况。