覆盖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]
]);