我试图制作一个简单的搜索表单(它会很快变得更复杂,所以我在这里使用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。有没有一个好方法摆脱那些隐藏的领域?或许整个方法都错了?我想我无论如何都需要隐藏的字段(排序,分页等)。
答案 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())
]);