Yii 2 ArrayDataProvider的一些心得

概述

在Yii 2中,頁面上用表格顯示數據時,通常是用數據提供器(Data Provider)來給表格做爲數據源,這個思路就是無論你數據來源是什麼,可是最終提供給頁面表格顯示的時候,其格式和接口都是一致的,這樣就有效的實現了先後臺的解耦。php

在實際開發中,最經常使用的是ActiveDataProvider和SqlDataProvider,一個是使用ORM的方式從數據庫獲取數據,另外一種是直接使用SQL語句獲取數據,各有各的適用場合,使用起來也很是方便。前端

在Yii 2中,還提供了ArrayDataProvider,顧名思義,就是用數組做爲數據源,這個用的比較少,所以一開始的時候仍是有點生疏。數據庫

基本思路

簡單跟蹤一下代碼就能夠知道,前端表格在顯示數據的時候,其核心是要求數據以關聯數組的數組形式提供出來,因此使用ArrayDataProvider的時候,也是以這種形式提供數據就行了,基本的數組格式相似以下:數組

$data = [
  [
      'name' => 'zhangfei',
        'age' => 20,
    ],
  [
      'name' => 'guanyu',
        'age' => 20,
    ],
]

其實這個結構,跟使用Model查詢獲得的數據asArray()出來的結果是同樣的。ide

實現流程

定義Model

首先,要按照顯示的數據內容,定義一個Model,其實不定義Model也能夠,只要按照顯示的要求組織好關聯數組就能夠了,可是定義Model,能夠方便將來實現查詢、過濾。
Model的定義大體以下:工具

class ArrStudentModel extends Model
{
    public $name;
    public $age;

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['name'], 'string'],
            [['age'], 'integer']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'name' => '姓名',
            'age' => '年齡',
        ];
    }
}

看這個Model的結構是否是很眼熟,沒錯,跟使用Yii 2的工具自動生成的表Model是同樣同樣的,固然,懶一點,不繼承實現rules()和attributeLabels()也是沒問題的。不過,rules()能夠爲之後自動查詢提供默認的規則,而attributeLabels()能夠爲表格提供列標題的文字,因此搞一個Model比較合適。code

查詢

查詢的作法也很簡單,跟ActiveRecord一樣處理,在Model中提供查詢的接口便可。繼承

相關文章
相關標籤/搜索