если внимательно посмотреть в исходники, можно увидеть что prepareDataProvider использует dataFilter и вместо переписывания и дублирования значительной части IndexAction можно ограничиться заданием только dataFilters:
public function actions()
{
$actions = parent::actions();
$actions['index']['dataFilter'] = [
'class' => 'yii\data\ActiveDataFilter',
'searchModel' => function () {
return (new \yii\base\DynamicModel(['id' => null, 'company_name' => null]))
->addRule('id', 'integer')
->addRule('company_name', 'trim')
->addRule('company_name', 'string');
},
];
return $actions;
}
после этого http://localhost/clients?filter[id]=10 or http://localhost/clients?filter[email][like]=gmail.com работают из коробки