Giter Site home page Giter Site logo

qeephp's Introduction

  • 👋 Hi, I’m @yszc
  • 👀 I’m interested in bigdata technology
  • 🌱 I’m currently learning English
  • 💞️ I’m looking for collaborate on privacy compute
  • 📫 visit my homepage https://0x0f.tech

qeephp's People

qeephp's Issues

数据库操作失败时抛出异常

以前为了兼容 PHP4,数据库操作失败时是返回 
false,现在则改为抛出异常。

不过抛出异常需要修改事务机制,以便在异常抛出后,事务��
�够正确回滚。

Original issue reported on code.google.com by [email protected] on 19 Jul 2007 at 6:09

基于 Web 界面的应用管理器

应用管理器可以查看应用的各个部件,并且对这些部件进行��
�理。还可以修改配置文
件,清空缓存等。

主要功能有:
1、可以列出应用所有的 module、namespace
2、可以列出各个 module、namespace 下的 
controller、model、table、ui、view、
helper
3、可以删除已有的 controller、model、table
4、可以自动生成 controller、model、table
5、可以选择数据表,批量生成 model 或 table
6、可以清空缓存、日志
7、配置文件管理器

Original issue reported on code.google.com by [email protected] on 18 Apr 2008 at 6:59

添加 QDB_Table::createExpr() 方法

QDB_Table::createExpr() 方法返回一个 QDB_Expr 对象。

好处在于可以在 QDB_Table::createExpr() 
中对表达式包含的字段名进行自动转义,例如:

{{{
$expr = $table_posts->createExpr('LEFT([title], 5)');
// $expr 的内容是 LEFT(`posts`.`title`, 5)
}}}

更进一步,当在 QDB_Select 中使用该 QDB_Expr 
对象时,表名称可以自动替换为由开发者指
定的表别名。

{{{
// SELECT LEFT(`p`.`title, 5) FROM `posts` `p`
$select->from(array('p' => 'posts'), $expr);
}}}

Original issue reported on code.google.com by [email protected] on 21 Apr 2008 at 8:16

改进内部的路径搜索

当前,行为插件、视图、控制器的查找是完全固定的搜索路��
�。但是由于引入了
module,必须能够动态的确定搜索路径。

因此应该引入一个路径管理机制。以便载入行为插件等类时��
�可以从特定的 module
载入。

Original issue reported on code.google.com by [email protected] on 13 Apr 2008 at 3:37

将 ActiveRecord 继承类的静态方法迁移到单独的 meta 对象中实现

由于 PHP 5.3 之前不支持延迟绑定,所以如果要在 ActiveRecord 
继承类中添加一些
公共静态方法,则不得不修改所有的继承类。

因此应该将这些公共静态方法封装到一个单独的对象中。这��
�一来,应用程序可以使
用 Post::do()->validate() 等方法。

不过为了保持已有应用程序的兼容性,Post::find() 
静态方法仍然保留。

增加 meta 对象后,ActiveRecord 内部的一些方法也可以迁移到 
meta 对象,从而进
一步简化 ActiveRecord 的实现。

Original issue reported on code.google.com by [email protected] on 13 Apr 2008 at 5:35

ActiveRecord behavior versioned

versioned 行为插件可以为对象提供版本控制能力。例如 wiki 
的文章具备多个版本。

使用 versioned 插件后,可以在数据库中保存对象的多个版本。

生成对象的新版本时,老版本的对象会获得一个新的ID,而最
新的内容则占用现有的
ID。因此,以ID查询对象时,总是会获得最新版本的内容。


versioned 插件提供下列方法:

// 获得当前的版本号
string getVersion();

// 将当前内容重置到特定版本
void revertToVersion($version);

// 获得下一个版本号
string getNextVersion();

// 获得上一个版本号
string getPrevVersion();

// 获得最早的版本号
string getFirstVersion();

// 获得最后的版本号(当前内容的版本号)
string getLastVersion();

// 删除比当前版本更久(版本号更小)的内容
void removeOldVersions();


versioned 插件提供的静态方法:

// 删除所有老版本
void removeAllOldVersions();

// 删除指定版本
void removeVersion($version);


Original issue reported on code.google.com by [email protected] on 13 Apr 2008 at 1:24

完善 QDB_ActiveRecord_Abstract::save()

该方法的逻辑根据关联类型的不同稍有区别。

belongs to 
关联的对象始终不自动保存,其他类型的关联对象则根据 
on_save 设置
来决定。

$use_transaction 参数指定是否使用事务。

Original issue reported on code.google.com by [email protected] on 18 Apr 2008 at 7:13

WebControls 改进

    *  可以将 WebControls 的行为(对用户操作的响应)封装到 WebControl 实现中
    * 每一个 WebControl 可以是一个对象(方便封装行为和复杂的操作)
    * 每一个 WebControl 可以完全打包为一个独立的组件(包括 html 模板、css
样式、资源文件等)
    * WebControls 的注册和检索机制,以便在需要时自动实例化 WebControl

Original issue reported on code.google.com by [email protected] on 29 Jul 2007 at 4:06

完善 ActiveRecord 属性和字段名的映射

由于允许将一个字段名指定一个属性别名,因此在 
find()、save() 时都要加以考虑。

难点在于 QDB_Table_Select 
对象如何将查询语句中的属性名转换为实际的字段名。

Original issue reported on code.google.com by [email protected] on 18 Apr 2008 at 7:16

实现脚手架功能

脚手架是一个根据配置文件生成用户界面的功能。

利用脚手架,可以快速获得一个数据的列表、查看、编辑和��
�索界面。

QeePHP 自带的脚手架提供有限的功能,主要支持下列功能:
1、可以设置列表、查看、编辑界面分别要显示对象的哪些属�
��
2、可以设置属性的显示和输入方式(例如文本框、下拉列表�
��或者 WebControls 控件)
3、支持关联

Original issue reported on code.google.com by [email protected] on 18 Apr 2008 at 6:54

create_autofill 和 update_autofill

添加和更新记录时,可以根据 create_autofill 和 update_autofill 
来自动填充字
段值。填充时,应该允许通过回调函数指定具体的字段值。

Original issue reported on code.google.com by [email protected] on 26 Mar 2008 at 2:22

QDB_Select 实现对字段名映射的支持

映射名是指可以在查询参数中使用映射名作为字段名。QDB_Sele
ct 会负责在生成查询时将映射
名转换为实际的字段名。

例如:

{{{
$select->columnMapping('title', 'post_title')
       ->where(array('post_title' => $title));
// 生成的查询条件是 `title` = {$title} 而不是 `post_title` = {$title}
}}}

Original issue reported on code.google.com by [email protected] on 25 Apr 2008 at 7:58

对数据集的支持

    * 封装一个数据集
    * 数据集可以自描述
    * 可以离线使用
    * 可以重新连接数据库,并从数据库获取更新后的数据
    * 可以重新连接数据库,并将更新后的数据保存到数据库
    * 支持多重版本

Original issue reported on code.google.com by [email protected] on 29 Jul 2007 at 4:16

配合 QeePHP 发布重新打包的 APM Express

重新打包的 APM Express 需要配置好命令行方式的 
php.exe,以便让开发者能够使用
命令行代码生成器。

还应该默认包含 phpMyAdmin,以及 scite 这样的编辑器。

Original issue reported on code.google.com by [email protected] on 19 Apr 2008 at 8:53

实现 QCache_Memcache

QCache_Memcache 使用 memcached 作为缓存服务。

QCache_Memcache 应该支持 php-memcache 扩展和纯 PHP 的 memcached 
客户端。

Original issue reported on code.google.com by [email protected] on 19 Apr 2008 at 8:46

关联表的处理方式改进

现在使用 
linkRead、linkCreate、linkUpdate、linkRemove、linkRemoveFillValue 来
指示操作主表时如何操作关联表。

应该改进为使用和数据库外键约束相匹配的处理方式。

mysql5 支持的处理方式:

reference_definition:
    REFERENCES tbl_name [(index_col_name,...)]
      [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
      [ON DELETE reference_option]
      [ON UPDATE reference_option]

reference_option:
    RESTRICT | CASCADE | SET NULL | NO ACTION

Original issue reported on code.google.com by [email protected] on 21 Jul 2007 at 3:28

完成基于 cookie 的 session 服务

基于 cookie 的 session 
能够避免将应用程序部署到多台服务器上需要考虑 session
共享的问题。

但是将 session 数据存入 cookie,必须进行加密。可以参考 
PHPRPC 的加密算法部分。

Original issue reported on code.google.com by [email protected] on 19 Apr 2008 at 9:04

完善 QDB_ActiveRecord_Abstract::destroy()

destroy() 方法的逻辑应该是:

首先删除已有的关联对象,再删除当前对象。是否删除关联��
�象,要根据关联的
on_delete 设置来决定。

destroy() 应该有一个 $use_transaction 参数。该参数为 true 
时,会启用事务。
但在删除关联对象时,这个参数应该指定为 
false。这样可以把嵌套的删除操作封装
在同一个事务中。

Original issue reported on code.google.com by [email protected] on 18 Apr 2008 at 7:12

高效的缓存系统

    *  基本要求
          o 支持 memcached
          o 支持多层目录
          o 高效的锁定与原子更新
          o 多种缓存策略

    * 页面的缓存
          o 支持页面内容的部分缓存
          o 可以在应用程序外围进行缓存
          o 可以缓存 WebControls 实例的内容
          o 可以为每一个 WebControls 实例指定不同的缓存策略

    * 数据缓存
          o 可以直接缓存为 php 数组(加快载入速度)
          o 可以缓存序列化以后的数据
          o 可以在反序列化时自动载入需要的对象定义文件(借助 QeePHP 的对象
载入机制)

Original issue reported on code.google.com by [email protected] on 29 Jul 2007 at 4:06

对 ActiveRecord 的支持

    * 可以将一个 PHP 对象映射到数据库记录
    * 可以通过对象的特定属性、方法或者配置文件来定义 PHP 对象属性与数据表记
录之间的映射关系、类型转换和格式转换
    * 可以离线后再与数据库同步(类似数据集)
    * 支持单表继承
    * 支持对象间的关联关系

Original issue reported on code.google.com by [email protected] on 29 Jul 2007 at 4:19

改进图像验证码生成工具

默认生成的图像验证码太简单,可以提供更多的形式。

参考:http://www.fleaphp.org/bbs/viewthread.php?tid=2842

Original issue reported on code.google.com by [email protected] on 19 Apr 2008 at 8:24

简化版的表数据入口

    * 如果对性能影响不大,则不实现简化版的表数据入口
    * 不支持自动关联
    * 不支持自动事务
    * 简化的 CRUD 操作
    * 是现有表数据入口的基础类
    * 支持 schema
    * 支持类似 RoR 的 acts 机制(允许同时启用多个 acts)
          o 树形结构
          o 改进型先根遍历算法
          o 垂直划分数据库
          o 垂直划分数据表
          o 可缓存的查询
          o 乐观锁

Original issue reported on code.google.com by [email protected] on 29 Jul 2007 at 4:18

整体架构的改进

QeePHP 由三部分组成:

    * 核心:提供基本服务
    * 依赖核心的组件:所有依赖于 QeePHP 核心才能工作的组件
    * 独立的组件:不依赖 QeePHP 核心即可工作的组件

下列组件将实现为依赖核心的组件:

    * 应用程序设置(配置管理服务)
    * 对象容器
    * MVC
    * REST 支持
    * 用户界面组件模型

下列组件将实现为不依赖核心的组件:

    * 模板引擎支持
    * 数据库服务
    * 各种扩展组件
    * Ajax 支持
    * 缓存服务

Original issue reported on code.google.com by [email protected] on 29 Jul 2007 at 4:05

对数据库 Statement 的支持

Statement 是指预编译的查询申明或者存储过程。

    * 参数绑定
    * 结果集变量绑定
    * 允许关闭游标,以便重复执行一个 Statement
    * 对 Statement 的属性进行访问

Original issue reported on code.google.com by [email protected] on 29 Jul 2007 at 4:14

QController_Abstract::execute() 没有找到动作方法时应该抛出异常

{{{
    function execute($action_name, $namespace = null, $module = null)
    {
        $action_method = 'action' . ucfirst(strtolower($action_name));
        $action_method = str_replace('_', '', $action_method);
        if (method_exists($this, $action_method)) {
            $this->beforeExecute($action_name, $namespace, $module);
            $ret = $this->{$action_method}();
            return $this->afterExecute($action_name, $ret, $namespace,
$module);
        } else {
            $arr = array($this->request->controller_name, $action_name,
$namespace, $module);
            $this->view = null;
            return
call_user_func_array(Q::getIni('dispatcher_on_action_not_found'), $arr);
        }
    }
}}}

其中的:

{{{
call_user_func_array(Q::getIni('dispatcher_on_action_not_found'), $arr);
}}}

应该改为抛出异常。

Original issue reported on code.google.com by [email protected] on 11 Apr 2008 at 5:05

数据库版本管理工具

需要一个工具维护数据库设计的不同版本。

这个工具有下列基本功能:
1、比对两个版本数据库结构之间的差异,生成从一个版本转�
��到另一个版本需要的
sql 脚本
2、能够从 model 的定义获得数据库结构设计



Original issue reported on code.google.com by [email protected] on 18 Apr 2008 at 7:03

QDB_Table_Select::query() 方法增加 $included_links 参数

$included_links 参数指定查询时,查询哪些关联的数据。

查询纯数组时,$included_links 
参数可以限定只查询指定的关联。
查询对象时,$included_links 
参数指定要立即查询哪些关联,并立即组装对象。

Original issue reported on code.google.com by [email protected] on 18 Apr 2008 at 7:10

ActiveRecord behavior list

list 实现一个可排序、可调整列表项位置的列表。
list 
是一个双连接链表,每个元素都连接到前一个项目和后一个��
�目。

list 
的优势在于增加项目、删除项目、移动项目位置时速度快(��
�需要更新前后的项
目),缺点是无法按照按照严格索引值访问特定列表项目。��
�如要访问排序位置第三
位的项目,只能从第一个项目开始向后查找。幸运的是我们��
�特定项目的ID记录下
来,以便稍后快速访问。

--------------------

list 行为插件为 ActiveRecord 对象增加了下列方法:

// 在列表尾部或 $prev_item 项目后追加一个项目
void append($item, $prev_item = null); 

// 在列表头部或 $next_item 项目前插入一个项目
void insert($item, $next_item = null);

// 返回当前项目的下一个项目
object next();

// 返回当前项目的上一个项目
object prev();

// 判断当前项目是不是第一个
boolean isFirst();

// 判断当前项目是不是最后一个
boolean isLast();

// 下移项目位置
void moveDown();

// 上移项目位置
void moveUp();

// 与特定项目交换位置
void swap($item);

--------------------

list 行为插件实现了一个新的集合(继承自 
QColl),并添加了下列方法:

// 获得列表的第一个项目
object getFirst();

// 获得列表的最后一个项目
object getLast();

--------------------

list 行为插件拦截下列事件

boolean afterDestroy();
boolean afterCreate();

--------------------

如何使用 list 行为插件

list 插件有两种使用方式:
    在一个数据表中保存多个列表,每一个列表都属于另一个对象;
    在一个数据表中只有一个列表。

对于前一种情况,应在列表的所有者对象中使用 has_many 
指定其有关联多个列表项
目对象,并且指定该关联对象使用 list 行为插件。
后一种情况直接为列表对象指定使用 list 行为插件即可。


Original issue reported on code.google.com by [email protected] on 13 Apr 2008 at 4:15

对数据库 Profiler 的支持

Profiler 
可以监测数据库操作,并返回各种分析数据,用于调试和性��
�优化。

    * 记录所有的查询
    * 记录查询的起止时间
    * 记录查询的类型
    * 记录查询的参数

Original issue reported on code.google.com by [email protected] on 29 Jul 2007 at 4:15

ActiveRecord 对象增加一个 unregister() 方法

由于查询出来的对象都会在该对象的 meta 
元信息对象中持有一个引用。因此对象在
退出某个方法块后,不会自动销毁。

如果明确要求某个对象销毁,应该调用 meta 对象的 unregister() 
方法,或该对象
自身的 unregister() 方法。

调用 unregister() 实质上是从 meta 对象中删除对该对象的应用。

Original issue reported on code.google.com by [email protected] on 18 Apr 2008 at 7:21

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.