我正在尝试处理我的应用程序列表的过滤器表单。
我有一个表格:
$form = $this->createForm(new FilterAppliType());
当用户提交过滤器时,我将表单保存在会话中,如果用户离开页面并返回,则重新加载表单。
$form->handleRequest($request);
if (!$form->isSubmitted()) {
$this->get('application')->populateFormAppliFromSession($form);
}
// Save form data to session
if ($form->isSubmitted() && $form->isValid()) {
$this->get('application')->saveFormAppliToSession($form);
}
带有一些序列化/反序列化。这部分正在工作。
但是现在,我想处理一个重置按钮,该按钮可以取消设置表单并删除会话属性。
所以我尝试了:
<a href="{{ path('application_index', { 'reset': 'true' }) }}" class="btn btn-hollow btn-sm">
<span>Reset filter</span>
</a>
在我的控制器中:
$form = $this->createForm(new FiltreAppliType());
if($request->query->has('reset')){
if($this->get('session')->has('filter_appli')){
$this->get('session')->remove('filter_appli');
}
unset($form);
$form = $this->createForm(new FiltreAppliType());
}else{
$form->handleRequest($request);
// Populate it if we already have data from the request or from session, only when not submitted
if (!$form->isSubmitted()) {
$this->get('application')->populateFormAppliFromSession($form);
}
// Save form data to session
if ($form->isSubmitted() && $form->isValid()) {
$this->get('application')->saveFormAppliToSession($form);
}
}
问题是,因为我使用以下方式提交了表单过滤器:
{{ form_row(form.state, { 'attr': { 'onchange':"javascript:submit();" }}) }}
当我第一次单击“重置”按钮时,我在URL中/ application /?reset = true,然后如果更改过滤器状态,则URL保持不变并且过滤器不再工作(这是正常,我知道)...
您将如何处理? 感谢您的帮助。