В общем, имеется view в которой есть listView и activeForm, все обернуто в pjax, при попытке ввести новый фильтр ( к примеру "От 1000 до 10000" route в url строится как /site/catalog?start_retail[]=1000&end_retail[]=10000. Сейчас все верно, но когда я хочу ввести другой диапазон чисел, у меня получается что get параметры не заменяются, а генерируются /site/catalog?start_retail[]=1000&end_retail[]=10000&start_retail[]=99999&end_retail[]=999999
CatalogController
public function actionGet()
{
$model = $this->modelFindBySlug($this->slug);
$searchModel = new ProductCatalogSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams,$model->id);
$brands = $model->brands;
$weights = $model->weights;
$test['start'] = Yii::$app->request->get('ProductCatalogSearch')['start_retail_price'];
$test['end'] = Yii::$app->request->get('ProductCatalogSearch')['end_retail_price'];
if($test['start']){
$defaultPrice['min'] = $test['start'];
}else{
$defaultPrice['min'] = $model->minPrice;
}
if($test['end']){
$defaultPrice['max'] = $test['end'];
}else{
$defaultPrice['max'] = $model->maxPrice;
}
$defaultPrice['max'] = $model->maxPrice;
return $this->render('get',[
'model' => $model,
'dataProvider' => $dataProvider,
'search' => $searchModel,
'brands' => $brands,
'weights' => $weights,
'defaultPrice' => $defaultPrice
]);
}
View Get.php
<?php
use yii\widgets\ListView;
use yii\widgets\Pjax;
$this->title = 'Каталог';
Yii::$app->view->params['page'] = 'list';
?>
<?php Pjax::begin(['id' => 'catalogPjax','options' => ['class'=> 'pjaxContainer','timeout' => 2000, 'enableReplaceState' => true, 'clientOptions' => ['method' => 'GET']]])?>
<div class="col-lg-3">
<div class="filter">
<?= Yii::$app->controller->renderPartial('filters/_filter',['model' => $search,'brands' => $brands, 'weights' => $weights,'defaultPrice' => $defaultPrice]) ?>
</div>
</div>
<div class="col-lg-9">
<div class="filter-panel clearfix">
<h1><?= $model->name ?></h1>
</div>
<ul class="list-items row">
<?php echo ListView::widget([
'dataProvider' => $dataProvider,
'itemView' => '_item',
]); ?>
</ul>
</div>
<?php Pjax::end();?>
Particle _filter.php
<?php
use common\helpers\Formatter;
use yii\bootstrap\Html;
use yii\helpers\ArrayHelper;
use yii\widgets\ActiveForm;
$autolick = <<<JS
$('.filter_input').change(function() {
$('#filterButton').click();
});
JS;
$this->registerJs($autolick);
?>
<?php $form = ActiveForm::begin(['method' => 'GET', 'options' => ['data-pjax' => true]]) ?>
<button data-pjax=0 id="filterButton" class="hidden"></button>
<h3>Производитель</h3>
<ul>
<?= $form->field($model, 'brand_id')->checkboxList(ArrayHelper::map($brands, 'id', 'name'), [
'itemOptions' => ['class' => 'filter_input'],
])->label(false) ?>
</ul>
<h3>Цена <span> (тг) </span></h3>
<hr>
<span>От:</span>
<?= $form->field($model, 'start_retail_price')->textInput(['class' => 'filter_input', 'value' => $defaultPrice['min']])->label(false) ?>
<span>По:</span>
<?= $form->field($model, 'end_retail_price')->textInput(['class' => 'filter_input', 'value' => $defaultPrice['max']])->label(false) ?>
<hr>
<?php if ($weights) : ?>
<h3>Вес упаковки</h3>
<ul>
<?= $form->field($model, 'weight_net')->checkboxList(ArrayHelper::map($weights, 'weight_net', 'weight_net'), [
'item' => function ($index, $label, $name, $checked, $value) {
return Html::checkbox($name, $checked, ['label' => Formatter::asWeight($label), 'id' => $index, 'value' => $value, 'class' => 'filter_input']);
}
])->label(false) ?>
</ul>
<?php endif; ?>
<?php ActiveForm::end(); ?>
Теперь вопрос, как в ActiveForm обозначить, что атрибут не может быть массивом, и заменялся при изменении данных в нем?