通常我们有列表展示还是不够的,我们需要给列表增加一个搜索的功能
这就需要我们用到表单,YII的表单模型有两种,一种是CActiveRecord模型,一种是CFormModel,两者都支持数据验证等功能,唯一的区别是CFormModel不能插入到数据库,而AR可以插入到数据库,所以对于不需要插入到数据库的表单我们推荐使用CFormModel
因为搜索表单的表单比较简单,主要是文本输入框和下拉选项还有按钮,所以搜索的表单我们建议使用表单生成器CForm来完成
下面我来举例进行说明:
比如我想在列表的上面增加一个表单用来根据用户的id来搜索,并将对应的数据列表展示出来
controller中
public function actionIndex(){
//实例化一个用户搜索表单
$model = new UserSFM();
//使用UserSFM模型生成一个表单
$form = new CForm($model->getFMConfig(), $model);
//提交表单
$form->submitted();
//获取查询生成器
$criteria = $model->getCriteria();
//实例化数据提供器对象,第一个参数是查询的AR模型类名
$dataProvider = new CActiveDataProvider('User');
//设置查询器的查询条件
$dataProvider->setCriteria($criteria);
//设置分页的页大小
$dataProvider->setPagination(array('pageSize'=>3));
$this->render('index',array(
'dataProvider'=>$dataProvider,
'form'=>$form,
));
}
models目录下创建一个UserSFM搜索表单
<?php
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
* Description of UserSFM
*
* @author Jiulong Zhang <kowloon29320@163.com>
*/
class UserSFM extends CFormModel{
public $id;//定义搜索的Id属性
public $username;//定义搜索的名字属性
//生成表单的配置
public function getFMConfig(){
return array(
'id'=>'user_search_form',
'activeForm'=>array(
'class'=>'CActiveForm',
),
'method'=>'get',
'elements'=>array(
'id'=>array(
'type'=>'text',
),
'username'=>array(
'type'=>'text',
),
),
'buttons'=>array(
'submit'=>array(
'label'=>'搜 索',
'type'=>'submit',
),
),
);
}
//获取查询条件
public function getCriteria(){
$criteria = new CDbCriteria();
$criteria->with = array(
'city',
'user_info'
);
if($this->id){
$criteria->addCondition('t.id=:id');
$criteria->params[':id'] = $this->id;
}
if($this->username){
$criteria->addSearchCondition('t.username', $this->username);
}
return $criteria;
}
//表单标签显示的名字
public function attributeLabels() {
return array(
'id'=>'用户ID',
'username'=>'用户名'
);
}
//定义属性安全后 表单中才会显示该属性
public function rules() {
return array(
array('id,username','safe'),
);
}
}
?>
视图index.php中只需要在CGridView的挂件上面添加如下<h1>用户管理</h1>
<?php
echo $form;
?>
<?php
$this->widget('zii.widgets.grid.CGridView', array(
....
再次刷新就可以看到一个带有表单搜索功能的用户管理列表了