1. 程式人生 > 程式設計 >YII2框架中ActiveDataProvider與GridView的配合使用操作示例

YII2框架中ActiveDataProvider與GridView的配合使用操作示例

本文例項講述了YII2框架中ActiveDataProvider與GridView的配合使用操作。分享給大家供大家參考,具體如下:

YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的物件,方便我們構造複雜的查詢篩選語句。

配合強大的GridView,快速的顯示我們想要的資料。

通過上面的兩個工具,我們快速的顯示使用者表資訊。使用者表結構如下:

YII2框架中ActiveDataProvider與GridView的配合使用操作示例

我們建立一個使用者模型MyUser.php,程式碼如下:

<?php

namespace app\models;

use yii\db\ActiveRecord;
use yii\data\ActiveDataProvider;

class MyUser extends ActiveRecord
{

  //返回要操作的表名
  public static function tableName()
  {
    return '{{%user}}';
  }

  //設定規則
  //注意,如果沒有給欄位設定規則,GridView的篩選項是不會出現的
  public function rules()
  {
    return [
      [['id','name','sex','age'],'trim'],[['id','integer'],['name','string'],];
  }

  //查詢
  public function search($params)
  {
    //首先我們先獲取一個ActiveQuery
    $query = self::find();
    //然後建立一個ActiveDataProvider物件
    $provider = new ActiveDataProvider([
      //為ActiveDataProvider物件提供一個查詢物件
      'query' => $query,//設定分頁引數
      'pagination' => [
        //分頁大小
        'pageSize' => 3,//設定位址列當前頁數引數名
        'pageParam' => 'p',//設定位址列分頁大小引數名
        'pageSizeParam' => 'pageSize',],//設定排序
      'sort' => [
        //預設排序方式
        'defaultOrder' => [
          'id' => SORT_DESC,//參與排序的欄位
        'attributes' => [
          'id','age'
        ],]);

    //如果驗證沒通過,直接返回
    if (!($this->load($params) && $this->validate())) {
      return $provider;
    }

    //增加過濾條件
    $query->andFilterWhere(['id' => $this->id])
      ->andFilterWhere(['like',$this->name])
      ->andFilterWhere(['sex' => $this->sex])
      ->andFilterWhere(['age' => $this->age]);

    return $provider;
  }
}

然後,建立控制器TestController.php,程式碼如下:

<?php

namespace app\controllers;

use YII;
use yii\web\Controller;
use app\models\MyUser;

class TestController extends Controller
{
  public function actionTest()
  {

    $user = new MyUser();
    //呼叫模型search方法,把get引數傳進去
    $provider = $user->search(YII::$app->request->get());

    return $this->render('test',[
      'model' => $user,'provider' => $provider,]);
  }
}

檢視頁面test.php,程式碼如下:

<?php
use yii\helpers\Url;
use yii\helpers\Html;
use yii\grid\GridView;
?>

<div id="page-wrapper">
  <div class="row">
    <div class="col-lg-12">
      <button class="btn btn-primary" id="showSelBtn">顯示我選中的</button>
    </div>
  </div>
  <div class="row">
    <div class="col-lg-12">
      <?php echo GridView::widget([
        //設定GridView的ID
        'id' => 'myUserGridView',//設定資料提供器
        'dataProvider' => $provider,//設定篩選模型
        'filterModel' => $model,'columns' => [
          //複選框列
          ['class' => 'yii\grid\CheckboxColumn'],//顯示序號列
          ['class' => 'yii\grid\SerialColumn'],[
            //設定欄位顯示標題
            'label' => 'ID',//欄位名
            'attribute' => 'id',//格式化
            'format' => 'raw',//設定單元格樣式
            'headerOptions' => [
              'style' => 'width:120px;',[
            'label' => '姓名','attribute' => 'name','format' => 'raw',[
            'label' => '頭像','attribute' => 'head_img',//通過該返回值,我們可以任意控制列資料的顯示
            //$data指向的是當前行的資料結果集
            'value' => function ($data) {
              return '<img src="' . '/' . ltrim($data->head_img,'/') . '" width="60px">';
            },[
            'label' => '性別',//設定篩選選項
            'filter' => [0 => '男',1 => '女'],'attribute' => 'sex','value' => function ($data) {
              return ($data->sex == 0) ? '男' : '女';
            }
          ],[
            'label' => '年齡','attribute' => 'age',[
            'header' => '操作','class' => 'yii\grid\ActionColumn',//設定顯示模板
            'template' => '{upd} {del}',//下面的按鈕設定,與上面的模板設定相關聯
            'buttons' => [
              'upd' => function ($url,$model,$key) {
                return '<a href="' . Url::toRoute(['test/upd','id' => $key]) . '" rel="external nofollow" class="btn btn-warning">修改</a>';
              },'del' => function ($url,$key) {
                return '<a href="' . Url::toRoute(['test/del','id' => $key]) . '" rel="external nofollow" class="btn btn-danger">刪除</a>';
              },]); ?>
    </div>
  </div>
</div>

<?php echo Html::jsFile('@web/js/jquery-3.3.1.min.js'); ?>
<script type="text/javascript">
  $("#showSelBtn").on("click",function () {
    var keys = $("#myUserGridView").yiiGridView('getSelectedRows');
    alert(keys);
  });
</script>

顯示結果如下:

YII2框架中ActiveDataProvider與GridView的配合使用操作示例

YII2框架中ActiveDataProvider與GridView的配合使用操作示例

更多關於Yii相關內容感興趣的讀者可檢視本站專題:《Yii框架入門及常用技巧總結》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php面向物件程式設計入門教程》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》

希望本文所述對大家基於Yii框架的PHP程式設計有所幫助。