如何让yii2 ActiveForm忽略以前提交的值?

And*_*rey 3 php forms yii2

我正在尝试创建一个简单的搜索表单(它将很快变得更复杂,所以我在这里使用ActiveForm而不是简单地将GET参数传递给action方法).

控制器:

public function actionIndex()
{
    $search_form = new UserSearchForm();
    $search_form->load(Yii::$app->request->get(), $formName = '');

    return $this->render('index', [
        'search_form' => $search_form
    ]);
}
Run Code Online (Sandbox Code Playgroud)

视图:

<?php $form = ActiveForm::begin(['id' => 'search-form', 'method' => 'get']); ?>
<?= $form->field($search_form, 'q')->textInput(['name' => 'q']) ?>
<?= Html::submitButton('Search') ?>
<?php ActiveForm::end(); ?>
Run Code Online (Sandbox Code Playgroud)

我在控制器中使用$ formName =''和'name'=>'q'以使查询字符串更清晰(简单q而不是UserSearchForm [q]).

在第一次提交之前,一切都很好.我在表单中看到隐藏的q字段,在第二次提交后,URL看起来像/ user?q = value1&q = value2,每个提交都会向隐藏字段添加另一个q.有没有一个好方法摆脱那些隐藏的领域?或许整个方法都错了?我想我无论如何都需要隐藏的字段(排序,分页等).

soj*_*oju 6

您应该只设置表单操作(如果为空它将是当前URL):

<?php $form = ActiveForm::begin([
    'id' => 'search-form',
    'method' => 'get',
    'action' => ['controller/index']
]); ?>
Run Code Online (Sandbox Code Playgroud)