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

时间:2014-12-22 16:25:06

标签: 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
    ]);
}

视图:

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

我使用$ formName =&#39;&#39;在控制器和&#39;名称&#39; =&GT; &#39; Q&#39;为了使查询字符串更清晰(简单q而不是UserSearchForm [q])。

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

如果您用于过滤与显示结果相同的操作和控制器,那么<​​/ p>

$form = ActiveForm::begin([
    'id' => 'filter-form',
    'method' => 'get',
    'action' => Url::toRoute(\Yii::$app->request->getPathInfo())
]);