花了一个上午的时间,把论坛里的内容整理了一下,主要供自己以后查阅时用,同时也给新手一些参考。
'displayErrors' => false,
'friendlyErrorsMessage' => false,
{
exit();
}
然后在 run() 之前:
__SET_EXCEPTION_HANDLER('exit_on_error');
'actionAccessor' => 'act',
一个 posts 对应多个 comments
posts 表:
id 主键字段
title
content
comments 表:
comments_id 主键字段
title
content
post_id 外键字段
需要实现的查询条件: posts.id > 10 and comments.title like '%abc%'
array('con_ht_a.mystate',2,'!=','AND'),
array('con_ht_b.myprocess2',$this->username,'LIKE')
);
答:是
问:使用fleaphp的ajax怎么做loading效果啊?
答:beforeSubmit
问:fleaphp如果获得一个层中的内容呢,比如
<div id='source'>中国</div>
我想获得中国这两个字,怎么搞?
答:$("#source").val();
function actionOnTest3()
{
$t = time();
$arr = array(
array('title' => '列表项目 1', 'created' => date('Y-m-d H:i:s', $t++)),
array('title' => '列表项目 2', 'created' => date('Y-m-d H:i:s', $t++)),
array('title' => '列表项目 3', 'created' => date('Y-m-d H:i:s', $t++)),
array('title' => '列表项目 4', 'created' => date('Y-m-d H:i:s', $t++)),
array('title' => '列表项目 5', 'created' => date('Y-m-d H:i:s', $t++)),
array('title' => '列表项目 6', 'created' => date('Y-m-d H:i:s', $t++)),
);
FLEA::loadClass('FLEA_Ajax');
echo json_encode($arr);
exit;
}
返回的是很清楚的json结构。
我希望这段数据是从一个数据库中读取,碰到2个问题。首先不会写,其次只要调用数据库输出就不对了。
function actionOnTest3()
{
//区域1:就是插入了这么两行,Lists是访问数据库的类
$this->_modelLists =& FLEA::getSingleton('Model_Lists');
$lists = $this->_modelLists->findAll();
//区域2:准备将读出来的数据生成Array,替换原有的写死的$arr数据
$t = time();
$arr = array(
array('title' => '列表项目 1', 'id' => '1'),
array('title' => '列表项目 2', 'id' => '2'),
array('title' => '列表项目 3', 'id' => '3'),
array('title' => '列表项目 4', 'id' => '4'),
array('title' => '列表项目 5', 'id' => '5'),
array('title' => '列表项目 6', 'id' => '6'),
);
FLEA::loadClass('FLEA_Ajax');
echo json_encode($arr);
exit;
}
但,只是在[区域1]增加了2行,而[区域2]几乎就是原有内容没有改变。结果,返回Ajax的内容就变成了把index.php文件内容返回,而不是原来的 json 结构。
1 定义你的webcontrol
如果你觉得每次都写验证很烦,可以使用FleaPHP提供的验证功能,让它去我那成.
数据表:
<?php
CREATE TABLE `form` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 64 ) NOT NULL ,
`email` VARCHAR( 128 ) NOT NULL ,
`birth` DATE NOT NULL ,
`created` INT NOT NULL
) ENGINE = MYISAM ; 姓名:
EMAIL:
生日:
根据之前的介绍构建表数据入口'Table_Form',并加入:
<?php
/**
* 开启自动验证
* @var string
*/
var $autoValidating = true;
/**
* 指定验证助手,你可以在这里添加你自己的验证函数,甚至验证助手
*
* @var string
*/
var $verifier = 'FLEA_Helper_Verifier';
/**
* 定义验证规则
*
* @var string
*/
var $validateRules = array(
'name' => array(
'minLength' =>1,
'maxLength' => 128
),
'birth' => array(
'minLength' =>1,
'complexType' => 'DATE'
),
'email' => array(
'minLength' =>1,
'complexType'=> 'EMAIL'
),
);Demo.php
<?php
//处理自动验证
function actionSaveValidate()
{
$tableForm = & FLEA::getSingleton('Table_Form');
foreach ($_POST as $key =>$value) {
if (empty($value)) {
echo "{$key}-empty";
exit();
}
}
__TRY();
$tableForm->save($_POST);
$ex = __CATCH();
if (__IS_EXCEPTION($ex)) {
echo '验证错误';
$this->actionValidate();
}
echo '新添加的表格';
$this->actionValidate();
}
class Model_Article
{
var $tableName = 'article';
var $primaryKey = 'aid';
var $belongsTo = array(
array(
'tableClass' => 'Model_User',
'foreignKey' => 'uid',
'mappingName' => 'user'
),
);
var $hasOne = array(
array(
'tableClass' => 'Model_Content',
'foreignKey' => 'aid',
'mappingName' => 'content',
),
);
}
答:首先取得数据表对象的实例,然后:
问:数据库不允许为空,验证规则如何做?
答:基本规则和你定义的数据表的属性保持一致。如果你的数据表某个字段为 notnull,那么验证时就要求必须有内容
问:如果字段检查email呢?
答:$rules['email']['complexType'] = 'EMAIL';
dump() 检查结果就知道了。获得结果后返回错误信息给js就行了
问: $_POST如果什么都不提交, $_POST的值是什么?
答:是一个长度为0的字符串,而不是 null
答:载入 FLEA.php 之前定义常量 DEPLOY_MODE 为 true,就是部署模式
问:fleaphp1.0.70的注释在ZDE里怎么只有在utf-8下才能正常显示
答:1.0.70 已经全部是 utf8 编码的文件了,但仍然可以支持任意编码的应用程序
问:FLEA::loadClass($classname,true);的意思
答:没找到类的时候不显示错误信息
问:fleaphp要用header('Location:modify.php&controller=aa&action=bb');要带一个参数应该怎样写
答:header('Location:modify.php&controller=aa&action=bb&xxx=' . $_GET['xxx'])
或者header('Location:'.url('Default','Index',array('xxx'=>$_GET['xxx'])))
问:另外有gd的相关支持吗?
答:FLEA_Helper_Image 专门处理图像的
问:为什么FLEA_Helper_Pager的findall不提供排序参数啊?
答:有啊,构造函数里面排序
问:
答:为了捕捉错误。
问:为什么要把找不到记录的判断放到一个单独CLASS里面,然后通过调用新的类来捕捉错误?
答:这是一个异常类,抛出这个异常方便更外围的代码获得通知(有错误发生)。外围的代码捕获这个异常后,可以自己决定如何处理异常,例如显示错误信息。
举个例子:
我是客服,面向最终用户,你是技术人员,负责解决技术问题
现在用户找到我,说要如何如何。
我把这个需求转交给你,你开始处理。
处理后,你告诉我结果,成功还是失败。
然后由我来和用户沟通。
这样,技术人员的责任和客服的责任都明确了。不然技术人员就要直接和用户打交道了。
问:我如果在自己已经装好的环境下装FLEAPHP,在把FLEA的包考进去之后需要什么安装操作吗?
答:不需要了
问:&是什么?
答:& 是引用传递
问:fleaphp里面有些空函数,起什么作用啊
答:这是方便在IDE里面显示方法和参数提示的。也是创建新的数据库驱动时所用的模板。
问:_forward怎么用?
答:FLEA_Controller_Action._forward ( $ controllerName,
$ actionName
)
$username= $ui->control('textbox', 'username',
array(
'class' => 'textbox',
'size' => 28,
'maxlength' => 22,
)
);
$this->_executeView('tpl-add.html', $username);
然后在 模板页'tpl-add.html'内,仅用写一个
<from action="">
{{$username}}
</from
等同于
$condition = array(
array(1,2,3,),
);
findAllByPkvs($condition);
以前的帖子参考
http://www.fleaphp.org.cn/bbs/viewthread.php?tid=1208&extra=&highlight=%E6%9F%A5%E8%AF%A2&page=1测试通过
另,条件过于复杂的情况下,老大提供的这个 操作方法,但我还没使用过。
$conditions = $youTable->qinto('
xxx LIKE ? AND (yyy LIKE ? OR zzz LIKE ?)', array(
"%{$aaa}%", "%{$bbb}%", "%{$ccc}%"
),
);
再没法子的,就使用
findBySql()
在关系数据库应用中,都离不开表与表的关联,表与表之间建立了关联关系后就可以提供很多方便的操作了,比如我要查询一个学生的信息,如果不建立学生与班级的关系的话,那么,只可以显示出学生的基本信息,而学生是属于某一个班级的,我现在想知道这个学生的信息与该学生所在的班级的信息,甚至是该学生的任课老师等信息,建立了学生表,与班级表,老师表之间的关系就方便好多了,用一个学生ID就可以查找出所有相关联的数据。
在FleaPHP中,支持以下四种关联关系:
我们下面就用 老师,学生,学生档案,班级的例子说说这几个关系。
以下是SQL代码:
不过还提醒大家一点,在每个关系里,都有一个 ‘enabled’ 的属性,如果设置为 false的话,则是将该关系禁掉,所以查询出来的结果就没有该关系的相应数据,这样可以节省效率,按需要时才打开相应的关联,该属性默认为true 可以如下设置:
这个例子已含盖了这四个关联关系的基本用法了,其它的就由你们来探索了,不久后,我将会发表一下这此关联方面的高级应用,有时间的话会写写这方面的东西。敬请期待!
更新时间到:2008-4-27 13:30.如有更新请以留言的形式回帖。谢谢!
© 2008 - 2010, Zeroun's Blog -- 黄志勇的博客!. 版权所有.
- 2012: extract($_POST, EXTR_SKIP)讲解实例(0)
- 2012: 关闭了register_globals 如何自动创建变量(0)
- 2010: 通过百度联盟(0)
One again, your articles is very good.thank you!very much.
$Condition=array(
array(‘Title’,”%{$Keywords}%”,’like’,'or’),
array(‘Cfrom’,”%{$Keywords}%”,’like’,'or’),
array(‘Id’,”%{$Keywords}%”,’like’),
);
like查询:
$conditions=array(
array(‘title’,$keyword,’=',’AND’),
array(‘class_id’,$class_id,’=',’OR’),
array(‘content’,'%’.$keyword.’%',’like’,'AND’),
array(‘class_id’,$class_id,’=')
);
在FleaPHP中,凡是用到数据库查询的函数,都需要查询条件参数$conditions,现讲述用法如下:
举例:
// $conditions 保存查询条件
$conditions = ‘level_ix > 1′;
// $tableOrders 是一个订单数据表的表数据入口对象
$order = $tableOrders->find($conditions, ‘created DESC’, ‘id, title, body’);
$conditions = array(‘username’ => ‘dualface’);
// $tableUsers 是一个用户信息数据表的表数据入口对象
$user = $tableUsers->find($conditions);
// $conditions 保存查询条件
$conditions = ‘level_ix > 1′;
// $tableOrders 是一个订单数据表的表数据入口对象
$order = $tableOrders->find($conditions, ‘created DESC’, ‘id, title, body’);
$conditions = array(‘username’ => ‘dualface’);
// $tableUsers 是一个用户信息数据表的表数据入口对象
$user = $tableUsers->find($conditions);$conditions 参数可以是整数、字符串和数组三种类型:
1.如果 $conditions 参数是一个整数,则假定该整数为主键字段值。view plaincopy to clipboardprint?
// 查询主键字段值为1的记录
$user = $tableUsers->find(1);
// 如果主键字段名为“id”,则生成的where字句为“WHERE `id` = 1”
// 查询主键字段值为1的记录
$user = $tableUsers->find(1);
// 如果主键字段名为“id”,则生成的where字句为“WHERE `id` = 1”2.如果 $conditions 参数是一个字符串,则该字符串将直接作为查询条件,这种方式可以支持最灵活的查询条件。 例如:
$conditions = ‘id find($conditions);
//生成的where字句为“WHERE id < 3”
$conditions = ‘id find($conditions);
//生成的where字句为“WHERE id ’1′,
);
$user = $tableUsers->find($conditions);
//生成的where字句为“WHERE `id` = 1”
// 查询id字段值为3的记录
$conditions = array(
‘id’ => ’1′,
);
$user = $tableUsers->find($conditions);
//生成的where字句为“WHERE `id` = 1”3.2.如果 $conditions 参数是一个数组,但其中的元素没有键名, 则假定键值为自定义查询条件,例如:
$conditions = array(‘id = 1′);
// 生成的where字句为“WHERE `id` = 1”
$user = $tableUsers->find($conditions);
$conditions = array(‘id = 1′);
// 生成的where字句为“WHERE `id` = 1”
$user = $tableUsers->find($conditions);3.3.$conditions 为数组时,可以混用字符串和键值对两种风格:view plaincopy to clipboardprint?
$conditions = array(
‘id ‘male’,
);
$user = $tableUsers->find($conditions);
// 生成的where字句为“id < 3 AND `sex` = ‘male’”
$conditions = array(
‘id ‘male’,
);
$user = $tableUsers->find($conditions);
// 生成的where字句为“id array(1,2,3),
)
$user = $tableUsers->find($conditions);
// 生成的where子句为“WHERE `id` IN (1, 2, 3)”
// 假如主键名为“id”,需要查询id的值为1、2、3其中之一,则可以这样写:
$condition = array(
‘in()’ => array(1,2,3),
)
$user = $tableUsers->find($conditions);
// 生成的where子句为“WHERE `id` IN (1, 2, 3)”那么如果不是主键的话怎么写了呢? 也很简单,提供键值对即可。例如:
$condition = array(
‘in()’ => array(
‘username’ => array(‘username1′,’username2′)
)
)
$user = $tableUsers->find($conditions);
// 生成的where子句为“WHERE `username` IN (‘username1′, ‘username2′)”
$condition = array(
‘in()’ => array(
‘username’ => array(‘username1′,’username2′)
)
)
$user = $tableUsers->find($conditions);
// 生成的where子句为“WHERE `username` IN (‘username1′, ‘username2′)”4.find()函数中其它参数的含义和用法如下:
4.1.$sort 参数指定查询时的排序方式,类型只能为字符串
例如 ‘created ASC’ 表示按照“created”字段进行从小到大的排序。
4.2.$fields 参数指定查询结果中要包含哪些字段,类型可以为字符串或数组
当数据表的字段很多时,通过指定 $fields 参数可以避免查询不需要的字段,从而提高性能。
$fields 参数即可是以“,”逗号分隔的字段名,也可以是包含多个字段名的数组,例如:
$fields = array(‘title’, ‘created’);
//也可以写成下面的字符串形式,两种写法作用相同,区别在于自动生成的字段名两边将会添加上“`”符号,以防止出现字段名与SQL关键字冲突的情况出现。建议手写时也加上“`”字符
$fields = ‘title, created’;
$user = $tableUsers->find(‘id find(‘id < 10′,NULL,$fields);推荐使用数组,这样表数据入口处理起来更快一些。