helmut-kleinhans / yii2-dbtools
Yii2 数据库备份和恢复功能
Requires
- php: >=7.0.0
- insolita/yii2-adminlte-widgets: *
- mkubenka/yii2-db-reconnect: 1.1.0
- yiisoft/yii2: *
- yiisoft/yii2-jui: *
This package is not auto-updated.
Last update: 2024-09-25 12:57:59 UTC
README
##检查和同步数据库结构与文件系统和子版本
数据库备份和恢复功能
安装
安装此扩展的首选方式是通过 composer。
运行以下命令之一
php composer.phar require --prefer-dist helmut-kleinhans/yii2-dbtools "*"
或
"helmut-kleinhans/yii2-dbtools": "*"
将以下内容添加到您的 composer.json 文件的 require 部分。
用法
安装扩展后,只需在您的配置中添加即可
基本 config/web.php
高级 [backend|frontend|common]/config/main.php
'modules' => [
'dbtools' => [
'class' => 'DbTools\DbToolsModule',
//'checkDefiner' => 'root@%', //used for manage tool to show warning if definer of procedure,
//function or trigger definer doesnt match
//'exportDelimiter' => '$$', //delimiter which will be used for export of Procedures,Functions
//and Triggers
//'xmlValues' => '@app/values.xml', //input file for constants and error values
/*
//define behaviors for the manage controller
'behaviorsManage' =>
[
'access' => [
'class' => \yii\filters\AccessControl::className(),
'rules' => [
[
'allow' => true,
'matchCallback' => function ($rule, $action) {
return \backend\models\User::checkRoutePermission($action->id,$action->controller->id,$action->controller->module->id);
}
],
],
],
],
*/
],
...
],
'aliases' => [
'@DbToolsExport' => '@app/dbtools', //folder to save exported and autogenerated files
...
],
用法
管理
美观的 URL /dbtools/manage
非美观的 URL index.php?r=dbtools/manage
DbTool 接口读取您的数据库并进行一些检查。
###表格 可以保存到文件系统中,但需要手动恢复。
- 警告
- 您可以通过将表列注释设置为 "Warning: xxxxx" 来添加警告
###过程 + 函数 + 触发器 可以保存到文件系统中,也可以恢复。
- 简短部分(见 简短)
- 警告
- 检查-警告
- 如果安全类型不是 INVOKER
- 如果定义者不是在配置中设置的定义者(modules=>dbtools=>checkDefiner)
- 如果 DECLARE 不以 "m_" 开头(DECLARE m_MyVar INT DEFAULT 0 ;)
- 如果 DECLARE 已知的错误与错误值 / 错误类型不匹配
- 如果 DECLARE 已知的常量与错误值 / 错误类型不匹配
- 如果 DECLARE 以 cConst 或 cError 开头但未在 values.xml 中设置
- 检查-警告
###视图 可以保存到文件系统中,但需要手动恢复。
###事件 可以保存到文件系统中,但需要手动恢复。
简短
简短部分应位于过程/函数/触发器的顶部
CREATE DEFINER=`root`@`%` PROCEDURE `myproc`(
IN inVar INT UNSIGNED,
OUT outVar BIGINT,
)
BEGIN
/**
@brief description of myproc
@param inVar description of param1
@param outVar description of param2
*/
DECLARE ...
- @brief
- 此项目的描述
- @param [ParameterName]
- 给定参数的描述
- @return
- 函数返回值的描述
- @warning [Warning Message Text]
- 向管理界面添加警告
- @note [Note Text]
- 向管理界面添加注释
- @deprecated
- 用于将项目标记为已弃用并添加警告
- @todo [Todo Text]
- 向管理界面添加待办事项
- @export
- 将项目标记为自动生成(见 自动生成)
- @select Name
- 对于您的过程或子过程输出的每个选择,您必须添加一个 "@select Name"。名称用于自动生成的类在 PHP 中接收结果(见 自动生成)(注意:@export 将设置为 true)
自动生成
美观的 URL /dbtools/manage/autogen
非美观的 URL index.php?r=dbtools/manage/autogen
自动生成工具用于将输入 xml(见 values.xml)和 Db 过程/函数(见 管理)转换为 PHP 文件。
自动生成的值
您可以在扩展文件夹中找到 example.xml
values_example.xml
请将文件复制到您的 Web 文件夹,并在您的配置中设置路径(modules->dbtools->xmlValues)
此文件用于生成一个 PHP 文件,其中包含用户定义的常量、错误代码以及从数据库导出的值。
生成的文件的保存位置可以在配置中设置(aliases->@DbToolsExport)。最终路径将是
@DbToolsExport/dbvalues/DbValues.php
示例
<cat name="CatName1">
<cat name="CatName2">
<enum value="100">
<error name="error1">Error Message1</error>
<error name="error2">Error Message2</error>
</enum>
</cat>
</cat>
<cat name="CatName3">
<const name="const1" type="INT" value="1"/>
<const name="const2" type="UNSIGNED INT" value="2"/>
<sql name="dbvalues" db="db" table="tablename" colname="col4name" colvalue="col4value"/>
<sqlenum name="dbenums" db="db" table="tablename" colenum="col4enum"/>
</cat>
将导致
<?php
namespace DbToolsExport\dbvalues;
class DbValues
{
//CatName1_CatName2
const eError_CatName1_CatName2_error1 = 100;
const eError_CatName1_CatName2_error2 = 101;
//CatName3_dbvalues
const cConst_CatName3_dbvalues_value1 = 1; //value 1
const cConst_CatName3_dbvalues_value2 = 2; //value 2
//CatName3_dbenums
const cConst_CatName3_dbenums_enum1 = 'enum_1';
const cConst_CatName3_dbenums_enum2 = 'enum_2';
const cConst_CatName3_dbenums_enum3 = 'enum_3';
//CatName3
const cConst_CatName3_const1 = 1;
const cConst_CatName3_const2 = 2;
const ErrorMessages = [
//CatName1_CatName2
self::eError_CatName1_CatName2_error1 => 'Error Message1',
self::eError_CatName1_CatName2_error2 => 'Error Message2',
//CatName3_dbvalues
//CatName3_dbenums
//CatName3
];
const DbTypes = [
'cConst_CatName3_dbvalues_value1' => 'TINYINT UNSIGNED',
'cConst_CatName3_dbvalues_value2' => 'TINYINT UNSIGNED',
'cConst_CatName3_dbenums_enum1' => 'CHAR(7)',
'cConst_CatName3_dbenums_enum2' => 'CHAR(7)',
'cConst_CatName3_dbenums_enum3' => 'CHAR(7)',
'cConst_CatName3_const1' => 'INT',
'cConst_CatName3_const2' => 'UNSIGNED INT',
];
const Keys = [
'error'=>[
'eError_CatName1_CatName2_error1',
'eError_CatName1_CatName2_error2',
],
'const'=>[
'cConst_CatName3_dbvalues_value1',
'cConst_CatName3_dbvalues_value2',
'cConst_CatName3_dbenums_enum1',
'cConst_CatName3_dbenums_enum2',
'cConst_CatName3_dbenums_enum3',
'cConst_CatName3_const1',
'cConst_CatName3_const2',
],];
public static function MessageByCode($errorcode)
{
if (!array_key_exists($errorcode, static::ErrorMessages))
{
return 'Unknown errorcode: ' . $errorcode;
}
return static::ErrorMessages[$errorcode];
}
}
/*
DECLARE eError_CatName1_CatName2_error1 SMALLINT UNSIGNED DEFAULT 100;
DECLARE eError_CatName1_CatName2_error2 SMALLINT UNSIGNED DEFAULT 101;
DECLARE cConst_CatName3_dbvalues_value1 TINYINT UNSIGNED DEFAULT 2;
DECLARE cConst_CatName3_dbvalues_value2 TINYINT UNSIGNED DEFAULT 1;
DECLARE cConst_CatName3_dbenums_enum1 CHAR(7) DEFAULT 'enum_1';
DECLARE cConst_CatName3_dbenums_enum2 CHAR(7) DEFAULT 'enum_2';
DECLARE cConst_CatName3_dbenums_enum3 CHAR(7) DEFAULT 'enum_3';
DECLARE cConst_CatName3_const1 INT DEFAULT 1;
DECLARE cConst_CatName3_const2 UNSIGNED INT DEFAULT 2;
*/
标签
类别
用于分组元素。
<cat name="CatName1" type="INT UNSIGNED">
- 名称
- 名称放置在子名称之前。
- 类型
- [可选] 类型用于创建 SQL 声明类型。您可以在此处指定类型并将其传递给所有子项,或者在每个子项中单独放置。
枚举
用于自动设置子元素的值,并在每个子元素之后递增。
<enum value="100">
- 值
- 每个子元素后值增加 1。
- 类型
- [可选] 类型用于创建 SQL 声明类型。您可以在此处指定类型并将其传递给所有子项,或者在每个子项中单独放置。
错误
错误代码应在数据库过程、函数和触发器内部用作异常,并且可以通过自动生成的类接收。(见 管理 和 自动生成)
<error name="error1">Error Message1</error>
- 名称
- 名称用于该错误
- 值
- 需要有一个值或从
- 文本
- 文本用作数据库异常的默认错误消息。在数据库中抛出错误时,您可以设置自定义消息。
常量
应在 PHP 或数据库中中使用。(见 管理)
<const name="const2" type="UNSIGNED INT" value="2"/>
- 名称
- 名称用于该常量
- 值
- 需要有一个值或从获取值或设置为 "位"
- 位
- 用于生成位值。您可以从 1 开始指定应设置的位。
- 示例:设置位 0x0001b、0x0100b、0x1000b => bit="1,3,4" => 13 十进制
- 类型
- [可选] 类型用于创建 SQL 声明类型。您可以在此处指定类型或从获取它
SQL
用于将数据库表的内容转换为可用的 PHP 常量。
<sql name="dbvalues" db="db" table="tablename" colname="col4name" colvalue="col4value"/>
- 名称
- 名称放置在子名称之前。
- db
- yiis 数据库连接标识符,在 yii config.xml -table 中使用
- 应转换的表 -colname
- 用于变量名称的列(注意:所有不符合 "a-zA-Z0-9_" 的字符都会被移除,并且每个下划线后的首字母和字母将大写) -colvalue
- 用于变量值的列
SQL 枚举
用于将数据库列枚举转换为可用的 PHP 常量。
<sqlenum name="dbenums" db="db" table="tablename" colenum="col4enum"/>
- 名称
- 名称放置在子名称之前。 -table
- 应转换的表 -colenum
- 用于变量名称和值的列(对于名称:所有不符合 "a-zA-Z0-9_" 的字符都会被移除,并且每个下划线后的首字母和字母将大写)
用法
要使用自动生成的文件,您需要包括
use DbToolsExport\dbvalues\DbValues;
并通过
$error = DbValues::eError_CatName1_CatName2_error1;
自动生成的类
此文件用于生成一个 PHP 文件,其中包含数据库过程或函数调用,包括抛出的错误异常。此外,它还添加了 OUT 参数的类成员,这些参数将被自动填充。过程可以有选择结果集 /see Brief/select。函数有一个返回值函数
要标记过程或函数以导出,请参阅 Brief/export。
生成的文件保存位置可以在配置中设置(别名-> @DbToolsExport)。最终路径将是
@DbToolsExport/dbclasses/{db}/dbProc{procedurename}.php
@DbToolsExport/dbclasses/{db}/dbFunc{functionname}.php
- db
- 配置中定义的数据库连接密钥
- procedurename
- 过程名称
- functionname
- 函数名称
用法
要使用自动生成的类,您需要包括
use DbToolsExport\dbclasses\db\dbFuncMyFunc;
//optional to receive exceptions
use DbTools\db\DbException;
并执行它
$q = new dbFuncMyFunc('v1');
try
{
$q->execute();
}
catch (DbException $e)
{
echo 'ERROR ('.$e->getCode().'): '.$e->getMessage();
}
echo $q->getResult();