2017-08-01 53 views
1

我想在yii2中更改gridview的过滤器。我想使用下拉列表和复选框来添加过滤器而不是过滤器文本框。如何使用activeDropDownList yii2更改网格视图过滤器?

1)undefine笔记本电脑模型错误 2)在我的代码下拉列表中工作,但显示没有文本的空列表(我想我错了一些事情)。帮我解决它。

这里是我的代码

<?= GridView::widget([ 
 
     'dataProvider' => $dataProvider, 
 
     'filterModel' => $searchModel, 
 
     'columns' => [ 
 
      ['class' => 'yii\grid\SerialColumn'], 
 

 
      //'id', 
 
\t \t \t [ 
 
\t \t \t 
 
\t \t \t 
 
       'attribute'=>'id', 
 
\t \t \t \t 'value'=>'id', 
 
       //'filter'=>array("1"=>"open","2"=>"in progress","3"=>"closed") 
 
\t \t \t \t 'filter' => Html::activeDropDownList($searchModel, 'id', ArrayHelper::map(Laptop::find()->asArray()->all(), 'id', 'laptop'),['class'=>'form-control','prompt' => 'Select Category']), 
 
\t \t \t ], 
 
      'network', 
 
      'technology', 
 
      'sup_id', 
 
      'speaker', 
 
\t \t \t 'size', 
 
\t \t \t [ 
 
      'class' => 'yii\grid\ActionColumn', 
 
\t 
 
      'template' => '{myButton}' , // the default buttons + your custom button 
 
      'buttons' => [ 
 
       'myButton' => function($url, $model, $key) {  // render your custom button 
 
        return Html::a('تایید'); 
 
       } 
 
      ] 
 
\t \t \t ], 
 
\t \t \t 
 
\t \t \t // [ 
 
      // 'class' => DataColumn::className(), // this line is optional 
 
      /* 'attribute' => 'name', 
 
      'format' => 'text', 
 
      'label' => 'Name', 
 
     ],*/ 
 
      // 'optical_drive', 
 
      //'webcam', 
 
      // 'touchpad', 
 
      // 'card_reader', 
 
      // 'ethernet', 
 
      // 'vga', 
 
      // 'hdmi', 
 
      // 'usb3_ports', 
 
      // 'usb2_ports', 
 
      // 'usb_type_c', 
 
      // 'thunderbolt_ports', 
 
      // 'serial_ports', 
 

 
      ['class' => 'yii\grid\ActionColumn'], 
 
     ], 
 
\t \t 
 
\t \t \t \t 'layout' => '{summary}{items}{pager}', 
 
\t \t 
 
\t \t 
 
\t \t 
 
    ]); ?>

在下面的部分我应该怎么改变来解决这个问题?

<? 
 

 
\t [ 
 
\t \t \t 
 
\t \t \t 
 
       'attribute'=>'id', 
 
\t \t \t \t 'value'=>'id', 
 
       //'filter'=>array("1"=>"open","2"=>"in progress","3"=>"closed") 
 
\t \t \t \t 'filter' => Html::activeDropDownList($searchModel, 'id', ArrayHelper::map(Laptop::find()->asArray()->all(), 'id', 'laptop'),['class'=>'form-control','prompt' => 'Select Category']), 
 
\t \t \t ], 
 

 
?>

谢谢:))

回答

1

尝试添加realted使用条款在你看来

例如,如果你有共同的\车型中的所有车型

use common\models\LapTop; 

use your_app_name\models\LapTop; 

分配适当的值your_app_name

或基本模板尝试

use app\models\LapTop; 

和过滤尝试使用仅

'filter'=>ArrayHelper::map(LapTop::find()->asArray()->all(), 'id', 'laptop'), 
+0

类‘警予\型号\笔记本电脑’未找到 – areff

+0

你确定你有命名空间中的一个名为笔记本电脑类已分配??????? – scaisEdge

+0

与应用遇到同样的错误的名称 – areff

1

如果使用PhpStorm可以删除此代码“Laptop :: find()” 输入此地点单词后“Lapto p“ - PhpStorm增加了下拉菜单 - 从这个下拉菜单中你应该选择”你的Laptopclass的位置“,

之后 - 在代码中你的单词”Laptop“将被类似的东西取代 - ”common \ models \ LapTop ::找到()”

例子:https://i.ytimg.com/vi/EVvBKDB1NNQ/maxresdefault.jpg

+0

如果您使用“笔记本电脑类”评论了代码,那么它在'使用'模型 – areff

+0

后显示相同的错误 - 您是否得到相同的错误?你需要知道产生你的错误的行。 –

+0

谢谢dude.it解决在前答案..post更新:))) – areff