是的,当然可以。你有几个选择:
解决方案 1 - 最差的解决方案,但您的问题的答案
修改模型的搜索功能(或创建新功能)。搜索功能通常是这样的
public function search($params)
{
$query = Bookmark::find()->where('status <> "deleted"');
$dataProvider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => Yii::$app->session->get(get_parent_class($this) . 'Pagination'),
],
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->andFilterWhere([
'status' => $this->status,
'id' => $this->id,
'reminder' => $this->reminder,
'order' => $this->order,
'update_time' => $this->update_time,
'update_by' => $this->update_by,
'create_time' => $this->create_time,
'create_by' => Yii::$app->user->id,
]);
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'url', $this->url]);
return $dataProvider;
}
你可以改成类似
public function search($params)
{
$query = Bookmark::find()->where('status <> "deleted"');
if (!($this->load($params) && $this->validate())) {
THROW AN ERROR SOMEHOW HERE
}
$query->andFilterWhere([
'status' => $this->status,
'id' => $this->id,
'reminder' => $this->reminder,
'order' => $this->order,
'update_time' => $this->update_time,
'update_by' => $this->update_by,
'create_time' => $this->create_time,
'create_by' => Yii::$app->user->id,
]);
$query->andFilterWhere(['like', 'name', $this->name])
->andFilterWhere(['like', 'url', $this->url]);
return $query->all();
}
但是这会返回给你所有的记录,因为 ActiveDataProvider 会根据给定的查询处理分页。
解决方案 2,更好的解决方案
在此处阅读第一个示例http://www.yiiframework.com/doc-2.0/yii-data-activedataprovider.html。您可以在 ActiveDataProvider 上调用 ->getModels() 以获取实际记录。无需更改搜索功能。对数组做任何你想做的事情。
解决方案 3 以及我一直使用的方法
将 ActiveDataProvider 与 ListView 一起使用。列表视图允许您根据需要创建记录列表,它不必是表格。我个人在很多地方都这样做,而且效果很好。我有时将数组转换为 ArrayDataProvider 只是为了使用它。更多关于数据提供者的信息:http://www.yiiframework.com/doc-2.0/guide-output-data-providers.html