foglcz/dibiproxy

dibi数据库层代理驱动集合。

v1.0.2 2012-10-16 11:14 UTC

This package is not auto-updated.

Last update: 2024-09-14 12:13:58 UTC


README

DibiProxy

这是dibi数据库层的“代理驱动”集合,您可以在http://www.dibiphp.com上获取

为什么

众所周知。当你准备在某个地方展示某物时,你的整个项目都在本地机器上运行。这种方法在大多数情况下都适用,然而我们面临了一个问题。让我们概述一下

  • 我们展示的网站连接到我们的ERP系统
  • 会议中无法连接到互联网,我们的账户经理需要展示本地安装
  • 我们觉得在账户经理的笔记本电脑上安装整个ERP系统不太舒服

因此我们决定采取另一种方法。让我们安装展示所需的最少数据库。由于项目一直在使用dibi作为DBAL,我们创建了代理类。

如何

代理类位于实际数据库驱动程序之上,缓存所有查询及其结果。当数据库不可用时,数据从缓存中加载。

由于一些查询正在更改数据并加载结果ID,我们实现了“覆盖”概念,其中结果不是通过查询而是通过覆盖键来缓存。因此,更改数据的查询(如插入)在预定义的键下保存并从缓存中加载。

安装

只需将其放入composer.json中

require {
  "foglcz/dibiproxy": "1.*"
}

由于dibi驱动程序的加载过程,您在使用之前需要包含适当的驱动程序

require_once 'vendor/foglcz/dibiproxy/lib/drivers/your.selected.driver.php';

然后,只需使用带有“Proxy”前缀的通用驱动程序并启用代理

$config['driver'] = 'proxymysqli';
$config['proxy'] = 'path_to_proxy_file.dat';

如果您有更改数据的查询(插入/更新),则应使用不同的类来连接到数据库

dibiProxy::connect($config);

之后,您可以像往常一样使用dibi::类进行所有数据操作。

用法

当使用“proxy”配置参数时,您应该提供保存代理数据的文件路径。如果您只提供“true”,但没有字符串,则类将在lib/类所在的目录中自动创建数据文件。

这些类工作起来是透明的,因此更新代理类没有其他步骤。代理在无数据库连接时使用。我们的使用方法是,在本地机器上连接可用时点击整个项目 - 然后销毁配置参数,使项目不连接。这次,我们验证结果 - 一切都应按默认方式工作。

更改数据的查询

如果您有一些更新/插入/删除查询,想在调用dibi::query()和/或$connection->*函数之前包含,您需要调用覆盖

dibi::setProxyOverride('some.ident.of.the.query');

这将导致将查询结果在此静态标识符下缓存。因此,您可以在代理项目中运行更改数据库的查询。

Nette框架加载

如果您正在使用Nette框架(这个了不起的东西可以在http://www.nette.org 上获得)并在config.neon文件中使用dibi驱动程序,可以通过这种方式加载代理类

database:
    driver: ProxyMysqli

services:
    database: DibiProxyConnection(%database%)

...这意味着在配置参数中交换驱动程序,并更改连接类的名称(即更改DibiConnection -> DibiProxyConnection)。

PHP 5.3或5.2

DibiProxy类利用PHP 5.4特征。然而,由于Dibi支持PHP 5.2,如果您想在旧版本的PHP上运行DibiProxy,您需要进行一个简单的更改。

  • 首先,选择您想要使用的驱动程序 - 例如ProxyMysqli。该驱动程序位于lib/drivers/ProxyMysqli.php中
  • 编辑ProxyMysqli.php文件并删除“use”行
  • 打开文件 lib/ProxyTrait.php,并将该 trait DibiProxyTrait 的内容复制过来 {/* 复制括号内的内容 */ }
  • 将 trait 的内容替换到包含 use 语句的行。
  • 将 trait 文件底部的异常定义复制到驱动文件中。

最终的文件将如下所示: https://gist.github.com/5464ca39375ddacf0041

基本上,这就是 PHP 解析器对 traits 的处理方式。它们基本上是辅助性的复制粘贴,这也是我们为什么要使用它们的原因。

作者和许可

由 Pavel Ptacek(c)2012 热爱创作。

(这些类是在演示前的夜间黑客马拉松中2小时内创建的。欢迎提交拉取请求。)