搜索

[转载] ThinkPHP 3.0 功能特性和更新说明(二)

[复制链接]
查看: 602|回复: 0
  • TA的每日心情

    2014-1-15 14:11
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    20

    主题

    130

    帖子

    677

    积分

    IT民工

    Rank: 5Rank: 5

    积分
    677
    发表于 2013-8-29 22:45:00 | 显示全部楼层 |阅读模式
    pstatus"> 本帖最后由 阿凡达 于 2013-8-29 22:47 编辑

        [模型]
      [新增] 添加自动验证的批量验证功能 需要在模型类里面设置patchValidate属性为true 默认为false,批处理验证采用getError() 方法获取后的错误信息是一个数组 需要自行处理。
      [新增] Model增加check方法 用于个别需要的情况手动验证数据,支持部分自动验证的规则 用法 check('验证数据','验证规则','验证类型') 验证类型支持 in between equal length regex expire ip_allow ip_deny,默认为regex 结果返回布尔值 $model->check($value,'email'); $model->check($value,'1,2,3','in');
      [新增] 自动验证规则增加between 用于判断提交数据是否在一个范围之内 例如 array('num','10,100','必须在10到100之间',0,’between’) 完善in规则,支持逗号分隔的字符串 array('num','1,2,5','只能选择1,2,5',0,’in’) 和下面的定义等效 array('num',array(1,2,5),'只能选择1,2,5',0,’in’)
      [新增] Model增加子查询支持,使用子查询的时候 select方法的参数必须为false,例如: // 首先构造子查询sql $subQuery = $model->field('id,name')->table('tablename')->group('field')->where($where)->order('status')->select(false); // 进行查询 $model->table($subQuery.' a')->where()->order()->select() 构造的子查询SQL可用于TP的连贯操作方法,例如table where等
      [新增] 视图模型的视图定义添加实际表名定义支持 使用 '_table'=>'test_db.test_table'
      [新增] 自动验证添加操作有效期验证 支持时间戳和日期格式定义 定义格式 array('任意字段','2011-10-1,2011-12-31','已经过了投票时间 ',self::MUST_VALIDATE,'expire',self::MODEL_INSERT)
      [新增] 字段验证方式 增加长度验证,格式定义如下: 区间格式定义 array('username','3,6','用户名长度必须大于等于3小于等于 6',self::MUST_VALIDATE,'length',self::MODEL_INSERT) 指定长度定义 array('mobile','11','手机号码长度必须11位 ',self::MUST_VALIDATE,'length',self::MODEL_INSERT)
      [新增] 增加查询缓存支持
      [新增] 增加联合查询union支持
      [新增] 查询条件增强 支持 $map['a&b'] $map['a|b']
      [新增] 增加了getFieldBy*** 查询
      [新增] 增加了_sql方法 替代 getlastsql方法
      [新增] Model类的field方法支持NOT机制 例如 field('id,name') 表示查询id,name字段 field('id,name',true); 表示查询除id,name之外的字段
      [新增] Model增加parseFieldsMap方法 用于处理字段映射的数据写入和读取 create方法已经内置对字段映射的数据写入支持 字段映射的读取需要手动处理 在find方法之后调用,例如: $data = $Model->where()->find(); parseFieldsMap($data);
      [新增] query和execute增加第二个参数 表示是否需要解析SQL 默认为false 表示直接执行sql 如果设为true 则会解析sql中特殊字符串 (需要配合连贯操作)例如 支持 $model->table()->where()->field()->query('select %FIELD% from %TABLE% %WHERE%);
      [新增] Db类增加buildSelectSql方法 用于生成查询sql Model类增加buildSql方法 用于生成子查询SQL 用法 $Model->where()->field()->order()->limit()->buildSql(); 和select用法一样 buildSql方法必须用在连贯操作的最后
      [新增] Model类增加_parseType 用于字段类型检测和转换
      [新增] Model类增加_after_db回调接口
      [修正] 修正模型类的find方法当主键值为0的时候的BUG
      [改进] 改进Model类和M方法 Model类架构方法增加dbName支持和tablePrefix参数 M方法可以直接用于跨库和不同数据表前缀支持
      [改进] 表单令牌验证增强 支持多窗口令牌
      [改进] 自动验证增强 增加between length expire ip_allow ip_deny等规则
      [改进] 优化unique验证规则
      [改进] 多数据库操作支持,包括M方法支持和Model类的切换数据库的Db方法 支持
      [改进] join方法增强
      [改进] getField方法增加用法支持 并支持跨库和表操作
      [改进] Model的add和save方法 如果用了$this->data 则及时清空 避免混淆
      [改进] Model的getlastsql方法支持当前模型 全局请用M()
      [改进] 关联模型跨库操作的改进 操作关联的时候M方法改用D方法
      [改进] D方法格式为:[项目://][分组/]模型
      [改进] Model类的db方法的第二个config参数支持配置参数
      [改进] create方法中的检查字段映射 放到状态检查之前 用于需要映射主键的情况
      [改进] Model类create方法中生成数据对象 增加 autoCheckFields属性的判断 如果autoCheckFields关闭 则不过滤表单中的非数据表字段
      [改进] 优化Model类的flush方法 在没有获取到字段信息则直接返回false 也不会记录字段缓存
      [改进] 字段缓存文件名 增加数据库前缀
      [改进] Db类对page连贯操作的完善支持
      [改进] 令牌验证放到自动验证成功后 避免验证错误后 表单令牌错误的情况
      [改进] 改进模型类的create方法对数据的验证
      [改进] 修正Model类的getTableName中关于dbName的获取
      [改进] Model类db方法增加params参数 用于切换数据库的时候传人额外的模型参数 原则上支持任意Model类的属性
      [删除] 废除model类的findall 如需要用select替代或者在公共模型类里面添加findall定义
      [删除] 删除高级模型类里面的切换数据库相关方法 2.1版本以上推荐直接使用模型类的db方法切换
      [删除] 去掉setField getField setInc setDec方法的condition条件参数 用连贯操作where替代
      [删除] 删除了tableSuffix属性 可以用trueTableName属性替代

      [数据库]
      [新增] IN 查询增加表达式参数支持 用于某些特殊情况的IN查询 $map['id'] = array('IN',$subQuery,'exp'); 其中subQuery是一个子查询或者SQL函数语法等 就可以使用exp参数在后面
      [新增] Mongo驱动增加调试SQL支持 也可以在MongoModel中采用getlastsql或者_sql方法调试最后执行命令 但是仅限于调试模式支持
      [新增] db类增加查询sql封装的缓存支持 惯例配置增加 'DB_SQL_BUILD_CACHE' => false, // 数据库查询的SQL创建缓存 'DB_SQL_BUILD_QUEUE' => 'file', // SQL缓存队列的缓存方式 支持 file xcache和apc 'DB_SQL_BUILD_LENGTH' => 20, // SQL缓存的队列长度
      [新增] 增加pdo的sqlsrv数据库类型的支持
      [新增] 增加sqlsrv数据库驱动
      [新增] 查询条件增加定义方式,并增加条件字段安全检测,例如: $map['name|title'] = array('like','%Think'); 等效于 $map['title'] = array('like','%Think'); $map['name'] = array('like','%Think'); $map['_logic'] = 'OR';
      [修正] 修正数据库驱动类的getFields方法
      [修正] 修正Db类的parseWhere方法在not between 查询条件下面的BUG
      [改进] 改进mysql对存储过程查询的支持
      [改进] 改进数据库的不等于判断符号 neq 解析为 <>
      [改进] 完善Db类的parseFields方法 改进对 Model中field('key,value')的支持
      [改进] 改进Db类的parseWhere方法对between数据的处理
      [改进] 完善Db类的table解析方法 可以支持数组方式 model类的table方法支持数组方式参数 支持表别名定义,例如 table(array('think_user'=>'user','think_article'=>'article'))
      [改进] Db类addSpecialChar方法更名为parseKey 用于统一处理字段名中的关键字
      [改进] 数据库驱动类的__destruct方法移到Db类
      [改进] 将__TABLE_NAME__这样的字符串替换成正规的表名,并且带上前缀和后缀 例如 $dao->join("__CHANNEL__ as c on c.pid = __COMPANY__.channelpid")->limit(10)->select(); 其中__CHANNEL__ 和 __COMPANY__ 将会翻译成对应的表名 这样使代码更好看也更易理解。
      [改进] 改进数据库驱动类对长连接配置的支持,配置下面参数即可 'DB_PARAMS'=>array('persist'=>true),
      [改进] 改进PDO驱动类的getFields方法对sqlite的支持
      [改进] 完善mssql驱动类的端口支持
      [改进] Db类parseConfig方法支持数组配置信息
      [改进] mysql和mysqli驱动insertAll方法增加replace参数
      [删除] 删除Db类中多余的addConnect和switchConnect方法
      [模板]
      [新增] 增加布局模板支持
      [新增] 在模版中的include标签,可以使用自定义属性, 替换被包含模版中格式为[var]的变量。 如 则被导入的模版中 [varname] 标签会被替换为 value
      [新增] Cx标签库增加for标签支持
      [新增] 模板禁用PHP语法支持
      [新增] 模板标签增加 {++$a} {--$b} 用法支持
      [修正] 修正Cx标签库的volist标签的mod属性
      [修正] 修正模板变量的函数解析的参数中带有=的BUG
      [改进] 去除Cx标签库的layout标签 增加新的layout标签用法
      [改进] 分组的模板结构改变为 Tpl/分组名/主题名/模块/操作.html
      [改进] 优化include标签解析
      [改进] 模板输出规则调整为 [模板主题:][模块:][操作] 不支持 跨项目和跨分组调用 该用法可用于display方法和include标签
      [改进] 改进模板输出替换变量__GROUP__ 如果当前没有分组则输出同 __APP__
      [调整] 当前模板文件名配置 更名为 TEMPLATE_NAME
      [调整] 默认模板主题设置为空 原来为default
      [调整] Think模板引擎的load方法更名为fetch
      [删除] 去掉Cx标签库的iterate方法定义
      [删除] 取消模板快捷变量输出 统一使用标准变量输出方式
      [删除] 废弃模板引擎的普通标签方式的include和load标签 以下用法不再支持 {include:public/header.html} {load:/public/css/common.css} 替代用法 因为XML标签方式的include和load用法更强大 ,包括可以传人模板变量名等,XML方式的load标签还有很多的别名用法,完全可以取代普通标签加载。 目前,普通标签仅仅用于输出变量和一些快捷输出。

     懒得打字嘛,点击右侧快捷回复 您的回复就是对攀登者IT俱乐部的最好支持!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    版权所有:金德网络科技工作室 投诉受理:185-7060-2743 合作热线:185-7060-2743

    备案信息:湘ICP备13002922号Powered by 金德网络  © 2008-2015 攀登者IT俱乐部

    友链/广告联系QQ:877630758 邮箱:admin@cnpdz.com

    快速回复 返回顶部 返回列表