Yii2网格过滤器下拉列表附加选项到arrayHelper

时间:2016-03-07 20:07:01

标签: arrays gridview drop-down-menu filter yii2

我想在网格中的下拉过滤器中添加聚合选项(示例中的“所有选项”),其中包含所有其他选项,并且看起来像这样:

All options
Option1
Option2
Option3
...

我试过这种方式:

格:

'filter' => ['All options', yii\helpers\ArrayHelper::map(app\models\RelatedModel::find()->all(), 'id', 'name'),]

ModelSearch:

if ($this->RelatedModelId == 'All options') {
        $query->andFilterWhere(['in', 'RelatedModelId', \yii\helpers\ArrayHelper::getColumn(RelatedModel::find()->all(), 'id')]);
    } else {
        $query->andFilterWhere(['RelatedModelId' => $this->RelatedModelId ,]);
    };

它有效(也许不是世界上最美丽的解决方案,但目前对我来说没问题)。唯一让我感到不安的是这个0(或者有时候,根据我如何更改代码的方式):下拉列表:

All options
0
    Option1
    Option2
    Option3
    ...

我知道这是因为过滤器([])中的括号'filter' => [...],但目前这是我能够实现所需功能的唯一方法。我不知道如何让它在括号中工作。是否有一种简单的方法(可以添加一个额外的小选项somwhow,某些地方可能)不显示这个0或者我是否必须完全不同?看起来这不是一个很大的问题,但最好不要看到它。或者我可以将此All放入map函数吗?

'filter' => yii\helpers\ArrayHelper::map(array_merge(['All options', app\models\RelatedModel::find()->all()]), 'id', 'name'),

我也试过array_merge()但没有成功。

有什么想法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

此:

'filter' => \yii\helpers\ArrayHelper::map(\app\models\RelatedModel::find()->all(), 'id', 'name'),

将在此下拉列表中呈现空选项(没有文本)以重置选项。

对于搜索,只需设置:

$this->andWhere(['your_field_id' => $this->your_field_id]);

在你的搜索模型中,你准备好了。

另外,请不要忘记在rules部分中将此属性添加为安全属性:

public function rules()
{
    return [
        ['your_field_id', 'safe'],
    ],
}

您可以在CRUD生成器中看到一个示例。

如果您要自定义显示的文字,请将prompt选项附加到现有yii\grid\DataColum $filterInputOptions

'filterInputOptions' => ['class' => 'form-control', 'id' => null, 'prompt' => 'All'],

同样通过将其置于视野中,您违反了MVC原则:

\yii\helpers\ArrayHelper::map(\app\models\RelatedModel::find()->all(), 'id', 'name'),

在控制器中调用它并作为参数传递给视图或包装一些getList()方法。