Symfony 5控制器中获取隐藏输入字段hidden input的value属性值的方法
问题原因
你在模板中自行添加的hidden输入字段没有被Symfony表单组件正确识别绑定,Symfony表单只会处理name属性符合其命名规则的提交字段,你当前仅配置了data-field属性不会被表单组件读取,因此提交后groupTab字段没有对应值,调用getViewData()自然返回空字符串。
可行解决方案
所有表单取值操作都要在调用$form->handleRequest($request)之后执行,否则只能拿到表单初始化时的默认值。
方案1:直接在表单类配置默认值(最推荐)
如果该字段固定为'0'不需要前端动态修改,直接在对应FormType中给groupTab字段设置默认值即可:
->add('groupTab', HiddenType::class, [ 'data' => '0', // 如果该字段不需要映射到关联实体,添加下面一行 'mapped' => false ])
模板中不需要再自行额外写hidden输入,仅保留{{ form_widget(form.groupTab) }}即可。控制器中处理请求后调用$form->get('groupTab')->getData()就能拿到预期的'0'。
方案2:修正自行添加的hidden字段的name属性
如果你需要前端动态修改该字段值,要给自定义的hidden字段配置正确的name属性,Symfony才会绑定对应值,推荐用表单变量直接获取规范的name值,避免手动写死出错:
<input type="hidden" name="{{ form.groupTab.vars.full_name }}" id="ce-participants__type" value="0">
确认绑定正常后,按原有方式从表单对象中取值即可。
方案3:直接从请求对象中取值(临时可用,不推荐)
如果不想修改模板和表单类,可以直接在控制器中从Request里读取提交的参数,绕开表单绑定逻辑:
// 先注入Symfony\Component\HttpFoundation\Request对象 $groupTab = $request->request->get('app_registration_group_type_form')['groupTab'] ?? '';
内容的提问来源于stack exchange,提问作者Haris Kurspahic
相关产品推荐
相关产品推荐

