yszc / qeephp Goto Github PK
View Code? Open in Web Editor NEWAutomatically exported from code.google.com/p/qeephp
Automatically exported from code.google.com/p/qeephp
重新打包的 APM Express 需要配置好命令行方式的
php.exe,以便让开发者能够使用
命令行代码生成器。
还应该默认包含 phpMyAdmin,以及 scite 这样的编辑器。
Original issue reported on code.google.com by [email protected]
on 19 Apr 2008 at 8:53
该方法的逻辑根据关联类型的不同稍有区别。
belongs to
关联的对象始终不自动保存,其他类型的关联对象则根据
on_save 设置
来决定。
$use_transaction 参数指定是否使用事务。
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:13
当前,行为插件、视图、控制器的查找是完全固定的搜索路��
�。但是由于引入了
module,必须能够动态的确定搜索路径。
因此应该引入一个路径管理机制。以便载入行为插件等类时��
�可以从特定的 module
载入。
Original issue reported on code.google.com by [email protected]
on 13 Apr 2008 at 3:37
默认生成的图像验证码太简单,可以提供更多的形式。
参考: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
许多数据库设计中都存在复合主键,表数据入口应该提供对��
�合主键的支持。
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 7:06
以前为了兼容 PHP4,数据库操作失败时是返回
false,现在则改为抛出异常。
不过抛出异常需要修改事务机制,以便在异常抛出后,事务��
�够正确回滚。
Original issue reported on code.google.com by [email protected]
on 19 Jul 2007 at 6:09
$included_links 参数指定查询时,查询哪些关联的数据。
查询纯数组时,$included_links
参数可以限定只查询指定的关联。
查询对象时,$included_links
参数指定要立即查询哪些关联,并立即组装对象。
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:10
脚手架是一个根据配置文件生成用户界面的功能。
利用脚手架,可以快速获得一个数据的列表、查看、编辑和��
�索界面。
QeePHP 自带的脚手架提供有限的功能,主要支持下列功能:
1、可以设置列表、查看、编辑界面分别要显示对象的哪些属�
��
2、可以设置属性的显示和输入方式(例如文本框、下拉列表�
��或者 WebControls 控件)
3、支持关联
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 6:54
由于允许将一个字段名指定一个属性别名,因此在
find()、save() 时都要加以考虑。
难点在于 QDB_Table_Select
对象如何将查询语句中的属性名转换为实际的字段名。
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:16
* 可以构造复杂的查询条件
* 可以嵌套 Condition
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:16
Statement 是指预编译的查询申明或者存储过程。
* 参数绑定
* 结果集变量绑定
* 允许关闭游标,以便重复执行一个 Statement
* 对 Statement 的属性进行访问
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:14
* 支持不同数据库原生的参数占位符
* 支持模拟使用 ? 作为查询参数占位符
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:08
映射名是指可以在查询参数中使用映射名作为字段名。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:12
:)
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:25
* 支持 FETCH_ARRAY
* 支持 FETCH_ASSOC
* 支持 FETCH_OBJECT
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:14
。。。。。居然遗忘了这个重要功能
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:22
现在使用
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
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
类似 findByField($fieldName, $fieldValue, ...)
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:18
由于 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
* 如果对性能影响不大,则不实现简化版的表数据入口
* 不支持自动关联
* 不支持自动事务
* 简化的 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
* 仅在第一次查询时才实际连接到数据库
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:13
假设 posts belongs_to users,其中两个 post 对象关联到同一个 user
对象。此时
会出现只有一个 post 对象能够正确设置 user
对象关联的问题。
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:17
当前 ActiveRecord
只支持单一主键。在许多场合中,这带来很多不便。因此需��
�
ActiveRecord 支持复合主键。
Original issue reported on code.google.com by [email protected]
on 15 Apr 2008 at 4:25
放入应用程序设置后,这两个设置将作为全局设置影响所有��
�表数据入口对象。
如果表数据入口继承类需要指定自己的设置,可以覆盖
$created_time_fields 和
$updated_time_fields 成员变量。
Original issue reported on code.google.com by [email protected]
on 24 Apr 2008 at 6:46
* 封装一个数据集
* 数据集可以自描述
* 可以离线使用
* 可以重新连接数据库,并从数据库获取更新后的数据
* 可以重新连接数据库,并将更新后的数据保存到数据库
* 支持多重版本
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:16
Smarty 适配器需要修改以适应新的架构。
Original issue reported on code.google.com by [email protected]
on 11 Apr 2008 at 5:17
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
Profiler
可以监测数据库操作,并返回各种分析数据,用于调试和性��
�优化。
* 记录所有的查询
* 记录查询的起止时间
* 记录查询的类型
* 记录查询的参数
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:15
经过这样重构,QDB_Select
将是一个更一般的查询对象,具备更好的适应性和灵活性。
Original issue reported on code.google.com by [email protected]
on 20 Apr 2008 at 9:46
* 封装一个表达式
* 允许嵌套
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:16
应用管理器可以查看应用的各个部件,并且对这些部件进行��
�理。还可以修改配置文
件,清空缓存等。
主要功能有:
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
需要一个工具维护数据库设计的不同版本。
这个工具有下列基本功能:
1、比对两个版本数据库结构之间的差异,生成从一个版本转�
��到另一个版本需要的
sql 脚本
2、能够从 model 的定义获得数据库结构设计
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:03
由于查询出来的对象都会在该对象的 meta
元信息对象中持有一个引用。因此对象在
退出某个方法块后,不会自动销毁。
如果明确要求某个对象销毁,应该调用 meta 对象的 unregister()
方法,或该对象
自身的 unregister() 方法。
调用 unregister() 实质上是从 meta 对象中删除对该对象的应用。
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:21
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
* 可以将 LOB 字段作为单独的对象处理
* 可以将 LOB 对象的数据直接保存到文件(避免巨大的 LOB 载入内存)
* 可以从文件载入数据到 LOB 对象
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:10
基于 cookie 的 session
能够避免将应用程序部署到多台服务器上需要考虑 session
共享的问题。
但是将 session 数据存入 cookie,必须进行加密。可以参考
PHPRPC 的加密算法部分。
Original issue reported on code.google.com by [email protected]
on 19 Apr 2008 at 9:04
{{{
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
* 可以将一个 PHP 对象映射到数据库记录
* 可以通过对象的特定属性、方法或者配置文件来定义 PHP 对象属性与数据表记
录之间的映射关系、类型转换和格式转换
* 可以离线后再与数据库同步(类似数据集)
* 支持单表继承
* 支持对象间的关联关系
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:19
需要编写一个 js
验证库,用于客户端验证。服务端根据验证规则生成同等功��
�的 js
调用代码。
自定义的验证规则无法转换。
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:01
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
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
* 可以将 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
事件驱动机制允许在服务端响应客户端事件。
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:26
model 的测试脚本是单元测试,controller
的测试脚本是功能测试。
两者都基于 PHPUnit 实现。
Original issue reported on code.google.com by [email protected]
on 18 Apr 2008 at 7:06
QeePHP 由三部分组成:
* 核心:提供基本服务
* 依赖核心的组件:所有依赖于 QeePHP 核心才能工作的组件
* 独立的组件:不依赖 QeePHP 核心即可工作的组件
下列组件将实现为依赖核心的组件:
* 应用程序设置(配置管理服务)
* 对象容器
* MVC
* REST 支持
* 用户界面组件模型
下列组件将实现为不依赖核心的组件:
* 模板引擎支持
* 数据库服务
* 各种扩展组件
* Ajax 支持
* 缓存服务
Original issue reported on code.google.com by [email protected]
on 29 Jul 2007 at 4:05
* 基本要求
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
添加和更新记录时,可以根据 create_autofill 和 update_autofill
来自动填充字
段值。填充时,应该允许通过回调函数指定具体的字段值。
Original issue reported on code.google.com by [email protected]
on 26 Mar 2008 at 2:22
将应用程序中的 ACL 组件迁移到 QeePHP
Original issue reported on code.google.com by [email protected]
on 19 Apr 2008 at 8:58
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.