You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony 6.0.2:如何在搜索表单中回显用户历史输入值?

Symfony 6.0.2 搜索表单返回时自动填充历史内容问题解决

问题描述

需要实现Symfony 6.0.2的搜索表单在用户返回时自动填充之前选择的内容,但当前实现未生效,以下是修正方案:

核心问题分析

  1. 控制器初始化逻辑错误:原代码使用$request->query->all()初始化表单,但返回搜索页面时URL通常无查询参数,导致表单无法加载历史数据。
  2. 模板手动设置value无效:对EntityType类型的字段手动设置value为实体名称/标题,不符合组件要求(该类型需要实体ID或对象来匹配选中状态)。

修正代码

1. 修改EventsController.php

调整表单初始化逻辑,优先从Session读取历史数据:

<?php

namespace App\Controller;

use App\Form\SearchType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class EventsController extends AbstractController
{   
    #[Route('/search', name: 'search')]
    public function search(Request $request, SessionInterface $sessionInterface)
    {   
        // 从Session获取历史表单数据,无数据则用空数组
        $formData = $sessionInterface->get('data', []);
        // 用历史数据初始化表单
        $form = $this->createForm(SearchType::class, $formData);
        $form->handleRequest($request);
        
        if ($form->isSubmitted() && $form->isValid()) {
            $data = $form->getData();
            $sessionInterface->set('data', $data);
            return $this->render('front/events.html.twig', $data);
        }

        return $this->renderForm('front/search.html.twig', [
            'form' => $form
        ]);
    }
}

2. 修改search.html.twig

移除手动设置的value属性,依赖Symfony表单组件自动渲染选中状态:

{% extends 'base.html.twig' %}

{% block title %}Liste des sorties et des activités !{% endblock %}

{% block main %}

{{ form_start(form) }}
    <p>Où souhaites-tu faire une sortie ou une activité ?</p>
    {{ form_widget(form.bigcity, {'attr' : {'class' : 'mb-3'}} ) }}
    <p>Quel type de sortie ou d’activité t’intéresse ?</p>
    {{ form_widget(form.category, {'attr' : {'class' : 'mb-3'}} ) }}
    {{ form_widget(form.save, {'label': 'Je valide', 'attr' : {'class' : 'btn'}} ) }}
{{ form_end(form) }}

{% endblock %}

修正说明

  • 控制器通过Session保存用户提交的表单数据,返回搜索页面时直接用Session数据初始化表单,确保历史选择被自动填充。
  • 移除模板中无效的value设置后,Symfony表单组件会根据初始化的formData自动匹配EntityType的选中项,无需手动干预。

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:50:45