最近用了一下Fleaphp,也是菜鸟一小只,反正我看fleaphp的API看的时候有时是懵懵懂懂,关键问题所在没有例子,所以在学习的同时把常用的和不长用的函数做了一下整理,这里包括在论坛上一些正确的答案,并加入了一些例子,方便一下想学fleaphp而又苦于看API的时候没有例子看的朋友,鄙人也是小菜鸟,写的不好,有些过于简单,所以请大虾闪过,鄙人是看到哪里写到哪里,跳跃性比较大,有点乱,所以请大家不要惊慌,本人的思维是没有问题的,请大家放心阅读,如果想查看哪些函数,请在本WEB页用ctrl+F查找, 今天写了20个函数,所以先发20,有时间再写再发,如果有些朋友想了解函数,又不愿意自己测试,请写发贴上来,鄙人有时间为大家效劳,献丑了 1。FLEA_Db_TableDataGateway::update ()用法: 例如:修改一条 uid=22 的记录, name字段改成"11", pass字段改成"22",就要这样写: $data = array('uid'=>22,'name'=>11,'pass'=>22); $table->update($data); 2。FLEA_Db_TableDataGateway::updateByConditions()用法: 例如:更新所有 level_ix = 3 的记录,并且把这些记录的特定字段(由 $row 确定)都更新为指定的值。 $row = array( 字段 => 字段值 字段 => 字段值 字段 => 字段值 字段 => 字段值 ); $conditions = array('level_ix' => 3); $table->updateByConditions($conditions, $row); 3。FLEA_Db_TableDataGateway::updateField()用途:更新记录的指定字段,返回更新的记录总数 例如:以查找满足$conditions的条件,修改其中字段为class_id的值为$targetId. $sourceId = $_POST['source']; $targetId = $_POST['target']; $conditions = array('class_id' => $sourceId); $table->updateField($conditions,'class_id',$targetId); 4。FLEA_Db_TableDataGateway::updateRowset ()用途:更新记录集(多行记录) 用法和update ()类似,只不过是修改多条记录: 例如:$data =array(array('id'=>'2','name'=>'111','job'=>'111'),array('id'=>'3','name'=>'222','job'=>'222')); $arr=$this->_test->updateRowset($data);想必大家能看明白吧呵呵。。。 一定注意:$data 一定要是二维的,即使用updateRowset ()修改一条记录也要这样写: $data=array(array('id'=>'2','name'=>'111','job'=>'111')); 说得清不清楚啊?呵呵 5。FLEA_Db_TableDataGateway::create ()用途:插入一条新记录,返回新记录的主键值 例如:$data = array(array('uid'=>22,'name'=>11,'pass'=>22),array('uid'=>23,'name'=>12,'pass'=>23)); $table->create($data); 6.FLEA_Db_TableDataGateway::createRowset()插入多行记录,返回包含所有新记录主键值的数组 例如:$data = array(array('uid'=>22,'name'=>11,'pass'=>22),array('uid'=>23,'name'=>12,'pass'=>23)); $table->createRowset($data); 7.FLEA_Db_TableDataGateway::remove () 删除一条记录,条件必须为主键 例如:remove(array("id"=>"2")); 8。FLEA_Db_TableDataGateway::removeByConditions ()看名知义,当然是删除符合条件的记录喽 正常情况下和remove()的条件可以通和,如果对有多个主键的表进行删除操作: conditions = array( '主键1' => xxx, '主键2' => yyy, '主键3' => zzz, ) $table->removeByConditions($conditions); 另注意一点:如果某个表有多个主键的话,那么它所对应的Model中的 $primaryKey 只能设置为一个最常用的主键,不能设置为一个数组 9。& FLEA_Db_TableDataGateway::findBySql ()用途:直接使用 sql 语句获取记录 例如: $arr=$this->_test->findBySql('SELECT * FROM newtable'); 10。FLEA_Db_TableDataGateway::decrField ()用途:减小符合条件的记录的指定字段的值,返回更新的记录总数 (该操作不会引发任何事件,也不会处理关联数据)。 例如:$arr=$this->_test->decrField(array('id'=>'3'),'prize',$decr = 2); 注意:$decr默认值为1,数字2是本人自己改的,当然你也可以改为34568了,改几就减几,明白了吧。。。 11。FLEA_Rbac_UsersManager::updatePasswordById ()用途:直接更新密码 例如:把ID为1的密码设为00000 $arr=$this->_student->updatePasswordById ('1','000000'); 注意:前提是数据库中一定要有叫做Password的字段;修改后的密码是加密的。 12。FLEA_Rbac_UsersManager::checkPassword ()用途:检查密码的明文和密文是否符合 例如: $user = $usersManager->findByUsername('andy'); $usersManager->checkPassword('000000', $user[$usersManager->passwordField])) 13.FLEA_Rbac_UsersManager::encodePassword ()用途:将密码明文转换为密文 例如: $user = $this->_student->findByUsername('andy'); $arr=$this->_student->encodePassword($user[$this->_student->passwordField]); $this->_student->updatePassword($user[username],$arr); 注意:前提是数据库中一定要有叫做Password的字段; 14.FLEA_Rbac_UsersManager::updatePasswordById ()用途:直接更新密码 这个我不说了啊,我想聪明的你一看例11就会明白了 15。FLEA_Db_TableDataGateway::updateByConditions ()用途:更新符合条件的记录,成功返回更新的记录总数 例如: $condition=array('id'=>2); $row=array('name'=>'nicholas'); $this->_test->updateByConditions($condition,$row); 16.FLEA_Db_TableDataGateway::updateField () 用途:更新记录的指定字段,返回更新的记录总数 该操作不会引发任何事件,也不会处理关联数据。 例如:修改id为2的记录,把字段为name的值修改为vin就要这么写: $condition=array('id'=>2); $this->_test->updateField($condition,'name','vin'); 17、FLEA_Db_TableDataGateway::incrField () 用途:增加符合条件的记录的指定字段的值,返回更新的记录总数 例如:这个也不说,去看例10吧,但要注意,例10是减,这个是加,嘿嘿。。。 18。FLEA_Db_TableDataGateway::replaceRowset () 用途:替换记录集(多行数据),返回记录集的主键字段值,失败返回 false $condition=array(array('id'=>2,'name'=>nicholas,'job'=>good)); $this->_test->replaceRowset($condition); 注意:1,假设表中有id,name,job,prize等,如果在$condition中没写prize字段,会就默认插入空,原有的数据会被清除,如不注意,也许会丢失数据 2。$condition一定是二维的 19。FLEA_Db_TableDataGateway::removeAll ()用途:删除所有记录,用时要谨慎 例如:$this->_test->removeAll (); 20。FLEA_Db_TableDataGateway::removeAllWithLinks ()用途:删除所有记录及关联的数据 注意:这个更加要慎用,所有与这个表有关联的表数据都将被删除,何谓有关联,也就是说,此表中的某个字段可能是另外一个表中的外键,此谓之有关联。 例如: 在MODEL中一个叫做com的表关联了一个叫做student的表,com表中的uid是student表中的外键,那么我们就说这两个表关联起来了,是用下面的方法关联起来的 class Model_com extends FLEA_Db_TableDataGateway { var $tableName = 'newtable'; var $primaryKey = 'uid'; var $hasOne=array('tableClass' => 'Model_student', 'foreignKey' => 'uid', 'mappingName'=>'jobs'); } 这时,我们执行下面的语句: $this->_test =& FLEA::getSingleton('Model_com'); $this->_test->removeAllWithLinks(); 大家想会发生什么后果?答对了,com表中的所有数据和student表中的所有数据都被删除了,注意是数据被删除了,表和字段还在。知道这个函数的邪恶了吧,所以请大家慎用。。。 21。FLEA_Db_TableDataGateway::removeByPkv (主键值) 参数是主键值,是几就写几,如:1,2,3等等。。。用途:根据主键值删除记录,首先删除关联表数据,再删除主表数据,简单的说,假如你把主表中ID为‘1’的一个条数据删除了,那么,与其关联的表中的那条ID为'1‘的条件也会被删除。 例如:$arr=$this->_test->removeByPkv ('1'); 22。FLEA_Db_TableDataGateway::removeByPkvs(主键值数组)用途:删除数组中所有主键值的记录 注意:参数是数组,而且不能像以往类似array('ID’=>'1')这样写成关联数组,要这样写:array(1,2,3) 例如: $conditions=array(1,2,3); $arr=$this->_test->removeByPkvs($conditions); 这两条语句的意思就是删除表中主键为1,2,3的记录。 发现一个问题:API上说:这条语句是删除数组中所有主键值的记录,该操作不会处理关联,但在实际测试的时候发现会影响关联表中的数据,关联表中的数据也一并被删除了,请大虾们解释一下,何故? 23。FLEA_Db_TableDataGateway::enableLink ()用途:启用指定关联 这个来自论坛廖老大答网友问,嘿嘿,当然要比鄙人解释的好,所以贴过来啦。。。 class Table_Posts extends FLEA_Db_TableDataGateway { . .. // enableLink() 参数就是关联的 mappingName $tablePosts->enableLink('comments'); .. var $hasMany = array( array( 'tableClass' => 'Table_Comments', 'foreignKey' => 'post_id', 'mappingName' => 'comments', .. 'enabled' => false, // 这里是关键,表示默认禁用该关联 ) ); }上面的代码定义了一个关联,但是查询时该关联并不会启用。只有在确实需要查询关联数据时,使用 .. // enableLink() 参数就是关联的 mappingName $tablePosts->enableLink('comments'); .. 24。FLEA_Db_TableDataGateway::enableLinks()用途:启用所有或多个关联 注意参数是个数组,这么写: $this->_test->enbleLinks(array('jobs','teacherjob')); 这样就可以启用多个关联了,呵呵 25。disableLink ()用途:禁用指定关联 请大家参照例23,用法都是一样的,只是作用相反 26。disableLinks ()用途:禁用所有或多个关联 这个请大家参照例24,用法一样 27.FLEA_Db_TableDataGateway::clearLinks()用途:清除所有关联 例如:$this->_test->clearLinks (); $arr=$this->_test->findAll(); 这时,与_test有关联的表中的数据就不会被显示出来了 28。FLEA_Db_TableDataGateway::relink ()用途:重建所有关联 给大家举个例子就全明白了: $this->_test->clearLinks (); $this->_test->relink (); $arr=$this->_test->findAll(); 注意例28和例27的区别,多一句 $this->_test->relink ();虽然前一句cldarLinks清除了所有关联,但是这句又把清除的关联又得新连接起来了,呵。。。 这回关联表中的数据又都显示出来了,嘿嘿,明白了吧 29.& FLEA_Db_TableDataGateway::getLink () 测试出来结果了,但还是不明白他的作用是什么,我会在论坛上发贴寻问,弄明白再贴上 30.& FLEA_Db_TableDataGateway::getLinkTable () (同上) 31.& FLEA_Db_TableDataGateway::existsLink (paddingname) 用途:检查指定名字的关联是否存在 例如:class Model_com extends FLEA_Db_TableDataGateway { var $tableName = 'newtable'; var $primaryKey = 'uid'; var $hasMany=array( array('tableClass' => 'Model_student', 'foreignKey' => 'uid', 'mappingName'=>'jobs', //'enabled' => false ), array('tableClass' => 'Model_teacher', 'foreignKey' => 'uid', 'mappingName'=>'teacherjob', //'enabled' => false ) ); } 这是在MODEL中定义的,关联了两个表,paddingname分别是jobs,teacherjob,大家看好,如果我在控制器中这么写: $arr=$this->_test->existsLink ('teacherjob'); dump($arr); 就会在浏览器中输出"1", 如果这么写 $arr=$this->_test->existsLink ('teacher'); dump($arr); 就会没有输出,看明白什么意思了吧,也就是说没有这个字段就不会有输出,有这个paddingname就会输出"1"啦,呵。。。 32。FLEA_Db_TableDataGateway::createLink ()用途:建立关联,并且返回新建立的关联对象 这个不班门弄斧了,这个是论坛上的,一看就明白: $link = array( 'tableClass' => 'Table_Test', 'foreignKey' => 'test_id', 'mappingName' => 'test', ); $table->createLink($link, HAS_MANY); 33.assembleRecursionRowset() 和 assembleRecursionRow() 例如:廖老大发的,啥也不说了,无条件接受吧,嘿嘿。。。 http://www.fleaphp.org/bbs/viewthread.php?tid=1878&highlight=assembleRecursionRow 34。& FLEA_Db_TableDataGateway::findByField () 例如:例如findByField('sno','020497'),其实就是和find("sno='020497'")是一样的效果 35。url($ controllerName = null, $actionName = null, $params = null,$anchor = null,$ options = null) 用途:很大! 这部分选自API,有例子,很好: 构造 url 构造 url 需要提供两个参数:控制器名称和控制器动作名。如果省略这两个参数或者其中一个。 则 url() 函数会使用应用程序设置中的确定的默认控制名称和默认控制器动作名。 url() 会根据应用程序设置 urlMode 生成不同的 URL 地址: URL_STANDARD - 标准模式(默认),例如 index.php?url=Login&action=Reject&id=1 URL_PATHINFO - PATHINFO 模式,例如 index.php/Login/Reject/id/1 URL_REWRITE - URL 重写模式,例如 /Login/Reject/id/1 生成的 url 地址,还要受下列应用程序设置的影响: controllerAccessor defaultController actionAccessor defaultAction urlMode urlLowerChar 用法: $url = url('Login', 'checkUser'); // $url 现在为 ?controller=Login&action=checkUser $url = url('Login', 'checkUser', array('username' => 'dualface')); // $url 现在为 controller=Login&action=checkUser&username=dualface $url = url('Article', 'View', array('id' => 1'), 'details'); // $url 现在为 controller=Article&action=View&id=1details 36.redirect() 这个函数很好,不过鄙人只用了他的基本用法 例如:redirect(../index.php);回到入口文件; redirect(url('default','zhx')); 就是这么用的,反正好用,呵呵还有一个常用的就是,如果再加入个参数,就可以实现几秒后跳转,就是在URL()的后面加入一个数子就行,大家知道有这个功能会用就行了 37。FLEA::loadFile ($filename,$loadonce=false) 用途:载入指定的文件 例如: FLEA::loadFile ('Table_Posts.php'); // 等同于 include 'Table/Posts.php'; $loadOnce 指定为 true 时,FLEAloadFile() 等同于 require_once 38.FLEA_Helper_ImgCode::image 下面给大家看展示一个很常用的函数,生成验证码的image(),下面看例子:
我先在MODEL中创建了一个类,这个类没有内容,没有内容为什么还要创建呢,这是因为要让这个函数继承FLEA_Helper_ImgCode 的强大功能啊,image()这个函数就在这个类里面.好了下面我们在控制器中写下面的语句: $this->imgcode =& FLEA::getSingleton('Model_code'); $this->imgcode->image(); 好了,这时运行就会在浏览器中输入随机的四位验证码了,当然四们是默认的,你也可以设为五位,六位了.请看参数依次为: int $type 验证码包含的字符类型,0 - 数字、1 - 字母、其他值 - 数字和字母 int $length 验证码长度 int $leftime 验证码有效时间(秒) array $options 附加选项,可以指定字体、宽度和高度等参数 39.FLEA_Helper_ImgCode::_hex2rgb () 用途:将 16 进制颜色值转换为 rgb 值 这个函数可能不常用,但看到了也一起写上来了 用时也要创建一个例38那样的空类继承FLEA_Helper_ImgCode 然后在控制器中这样写: 例如$this->imgcode =& FLEA::getSingleton('Model_code'); $this->imgcode->_hex2rgb('ff00ff'); 这时就会把16进制的ff00ff的颜色值转换为RGB值勤了 注意:因为RGB值是三个三位的,所以返回的是一个数组要用定义的数级变量接收 40.microtime_float()这个很常用,但很简单,写在这里的目的是为了让大家了解FLEAPHP中的这个microtime_float()和PHP5中mktime()的区别: mktime()返回的包含了从 Unix 纪元(January 1 1970 00:00:00 GMT)到给定时间的秒数,而microtime_float()返回的是毫秒数,返回值是浮点数.