YII2框架中ActiveDataProvider與GridView的配合使用操作示例
阿新 • • 發佈:2020-03-19
本文例項講述了YII2框架中ActiveDataProvider與GridView的配合使用操作。分享給大家供大家參考,具體如下:
YII2中ActiveDataProvider可以使用yii\db\Query或yii\db\ActiveQuery的物件,方便我們構造複雜的查詢篩選語句。
配合強大的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>
顯示結果如下:
更多關於Yii相關內容感興趣的讀者可檢視本站專題:《Yii框架入門及常用技巧總結》、《php優秀開發框架總結》、《smarty模板入門基礎教程》、《php面向物件程式設計入門教程》、《php字串(string)用法總結》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧彙總》
希望本文所述對大家基於Yii框架的PHP程式設計有所幫助。