覆盖Yii2中ActiveDataProvider的默认排序

覆盖Yii2中ActiveDataProvider的默认排序,yii2,Yii2,我有很多使用创建的模型。我希望所有的GridView都显示按created\u timeDESC排序的模型 现在我写了这样的东西 $dataProvider = new \yii\data\ActiveDataProvider([ 'query' => MyModel::find(), 'sort' => [ 'defaultOrder' => [ 'created_time' =>

我有很多使用
创建的模型。我希望所有的GridView都显示按
created\u time
DESC排序的模型

现在我写了这样的东西

$dataProvider = new \yii\data\ActiveDataProvider([
        'query' => MyModel::find(),
        'sort' => [
            'defaultOrder' => [
                'created_time' => SORT_DESC
            ]
        ],
    ]);
我没有编写所有的
sort
配置,而是尝试了下面的方法,但没有任何效果

  • 使用容器

    \Yii::$container->set(\yii\data\ActiveDataProvider::class,
            [
        'sort' => [
            'defaultOrder' => [
                'created_time' => SORT_DESC
            ]
        ]
    ]);
    
  • 重写扩展类中的
    排序

    class ActiveDataProvider extends \yii\data\ActiveDataProvider {
    
        public $sort = [
            'defaultOrder' => [
                'created_time' => SORT_DESC
            ]
        ];
    
     }
    
  • 在扩展类中的
    init()
    之前重写可以工作,但如果实例化再次尝试重写,则无法工作

    class ActiveDataProvider extends \yii\data\ActiveDataProvider {
        public function init() {
            $this->sort = [
                'defaultOrder' => [
                    'created_time' => SORT_DESC
                ]
            ];
            parent::init();
        }
    
    }
    
    //but this won't work if I want to use the ascending
    $dataProvider = new \app\components\data\ActiveDataProvider([
        'query' => MyModel::find(),
        'sort' => [
            'defaultOrder' => [
                'created_time' => SORT_ASC
            ]
        ],
    ]);
    
  • 你应该为而不是为。请参阅有关属性的文档

    1)带容器:

    use Yii;
    
    ...
    
    Yii::$container->set(\yii\data\Sort::className(),
        'defaultOrder' => [
            'created_time' => SORT_DESC,
        ],
    ]);
    
    2)覆盖类:

    class Sort extends yii\data\Sort
    {
        public $defaultOrder' = [
            'created_time' => SORT_DESC,
        ];
    }
    

    要对单个GridView执行此操作,可以将
    'defaultOrder'=>['created\u time'=>SORT\u DESC]
    添加到
    setSort()
    接受的数组中:


    是的,但他想为所有GridView全局设置。对不起,我的错,它工作正常。我必须使用
    \yii\data\Sort
    而不是
    yii\data\Sort
    如果某些模型没有创建时间,如何处理默认排序?
        $dataProvider->setSort([
            'attributes' => [
                'id',
                ...
            ],
            'defaultOrder' => ['created_time' => SORT_DESC]
        ]);