二12、搜索表单CFormModel

一般咱们有列表展现仍是不够的,咱们须要给列表增长一个搜索的功能
这就须要咱们用到表单,YII的表单模型有两种,一种是CActiveRecord模型,一种是CFormModel,二者都支持数据验证等功能,惟一的区别是CFormModel不能插入到数据库,而AR能够插入到数据库,因此对于不须要插入到数据库的表单咱们推荐使用CFormModel
由于搜索表单的表单比较简单,主要是文本输入框和下拉选项还有按钮,因此搜索的表单咱们建议使用表单生成器CForm来完成
下面我来举例进行说明:
好比我想在列表的上面增长一个表单用来根据用户的id来搜索,并将对应的数据列表展现出来

controller中
php

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(
....
再次刷新就能够看到一个带有表单搜索功能的用户管理列表了

相关文章
相关标签/搜索