二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(
....
再次刷新就能夠看到一個帶有表單搜索功能的用戶管理列表了

相關文章
相關標籤/搜索