我使用yii2,并且我想以不区分大小写的方式使gridview列“ description”可排序。有我的代码:
$dataProvider = new ArrayDataProvider([
'allModels' => $query->find(),
'sort' => [
'attributes' => ['name','description],
],
'pagination' => [
'pageSize' => $this->pageSize,
],
]);
当我单击列描述进行排序时,它显示如下:
如您所见,我想对大小写不区分大小写,我该怎么做呢?有想法吗?
答案 0 :(得分:0)
我认为,为了以不区分大小写的方式对ArrayDataProvider的行进行排序,您应该扩展ArrayDataProvider本身,因为它在内部使用ArrayHelper :: multisort,如果需要,可以按所需的方式进行排序必须将SORT_STRING | SORT_FLAG_CASE
作为第四个参数传递给该方法。默认情况下,其值等于SORT_REGULAR
常数。
在这里实现:
<?php
namespace app\dataproviders;
use yii\helpers\ArrayHelper;
/**
* Class ArrayDataProvider
*/
class ArrayDataProvider extends \yii\data\ArrayDataProvider
{
/** @inheritdoc */
protected function sortModels($models, $sort)
{
$orders = $sort->getOrders();
if (!empty($orders)) {
ArrayHelper::multisort(
$models,
array_keys($orders),
array_values($orders),
SORT_STRING | SORT_FLAG_CASE
);
}
return $models;
}
}
在使用扩展类而不是\yii\data\ArrayDataProvider
像这样:
$dataProvider = \app\dataproviders\ArrayDataProvider([
'allModels' => $query->find(),
'sort' => [
'attributes' => ['name','description'],
],
'pagination' => [
'pageSize' => $this->pageSize,
],
]);
答案 1 :(得分:0)
阿克马尔(Akmal)写的那真是太好了!
也许您需要为ArrayDataProvider指定键,以便在actionColumn不能正常工作时获取正确的ID!
$dataProvider = \app\dataproviders\ArrayDataProvider([
'allModels' => $query->find(),
'key'=> 'id',
如果要在gridview中过滤数据,则可以使用以下解决方案: Yii2 GridView with ArrrayDataProvider search 我也试过了,它有效! (最后一条提示:如果要过滤区分大小写的方式,可以使用stripos代替strpos)。 祝你好运!