【问题标题】:Yii2 grid filter dropdown additional option to arrayHelperYii2 网格过滤器下拉列表附加选项到 arrayHelper
【发布时间】:2016-03-07 20:07:00
【问题描述】:

我想向网格中的下拉过滤器添加一个 aggregating 选项(示例中为“所有选项”),它涵盖所有其他选项,看起来像这个:

All options
Option1
Option2
Option3
...

我试过这种方式:

网格:

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

模型搜索:

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

它有效(也许不是世界上最漂亮的解决方案,但目前对我来说还可以)。唯一让我感到不安的是下拉列表中的0(有时是 1,取决于我如何更改代码):

All options
0
    Option1
    Option2
    Option3
    ...

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

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

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

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

【问题讨论】:

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


    【解决方案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() 方法。

    【讨论】:

    • 您好 Arogachev 大师,感谢您的回复,但恐怕我当时表达得不够清楚。我不需要额外的 empty 选项,而是一个涵盖所有其他选项的选项。违反?在 Giiant 中已经如此,这就是为什么我也这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多