У меня есть много моделей, использующих created_time
. И я хочу, чтобы все GridViews отображали модели, отсортированные по created_time
DESC.Переопределить сортировку по умолчанию для ActiveDataProvider в Yii2
Прямо сейчас я пишу что-то вроде этого
$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 ] ] ]);
Переопределение
sort
в расширенном классе.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 ] ], ]);
Первый не работает –
Извините, мой плохой, он работает. Я должен использовать '\ yii \ data \ Sort' вместо' yii \ data \ Sort' –
Как обрабатывать сортировку по умолчанию Если в некоторых моделях нет create_time? –