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

Symfony表单预填报错:数组无dest_ville键的问题咨询

问题解决步骤

错误原因

你当前的$info = $expeditionRepository->findAll();会返回所有Expedition实体的数组,而Twig模板里直接写info.dest_ville,相当于从数组中查找键为dest_ville的元素——但数组的键是数字索引(0、1、2...),自然找不到,所以报错。

你的需求是通过URL中的ID获取单条数据,其实已经写了$exp_mail = $entityManager->getRepository(Expedition::class)->findOneBy(['id' => $id]);,这就是你需要的单条数据,只是没正确利用。


解决方法

1. 修改Controller中的数据获取逻辑

把获取全部数据的代码替换为根据ID获取单条数据:

// 替换原来的$info = $expeditionRepository->findAll();
$info = $id ? $expeditionRepository->find($id) : new Expedition();
  • 如果URL带ID(编辑场景),就从数据库取出对应实体;
  • 如果ID为空(新增场景),就创建一个空的Expedition对象,兼容两种场景。

另外,你已经定义的$exp_mail变量和上面的$info功能重复,可以直接复用$exp_mail作为模板变量,避免重复查询。

2. 调整Twig模板的取值逻辑

现在info是单个实体对象,直接访问实体属性即可(注意:Symfony实体属性通常是驼峰命名,比如destVille,对应数据库的dest_ville字段,Doctrine会自动映射):

<div id="div_24">
    <div class="align-inputs-dest">
        <b>Nom :</b>
        <input type="text" id="24" class="input_list input_uppercase input_color" maxlength="35" name="dest_nom" value="{{ info.destVille ?? '' }}">  
    </div>
</div>
  • 加?? ''是为了防止新增场景下info为空时出现报错,提供默认空值;
  • 如果你的实体属性确实是dest_ville(非驼峰),则保持info.dest_ville即可。

3. 验证路由配置

确保你的路由支持ID参数,比如:

# config/routes.yaml
app_expedition_newmodif:
    path: /expedition/newmodif/{id}
    controller: App\Controller\ExpeditionController::newmodif
    requirements:
        id: '\d+'
    defaults:
        id: null

这样编辑时URL会是/expedition/newmodif/123,ID会自动传入控制器的$id参数。


额外优化建议

推荐使用Symfony表单组件构建表单,自动处理数据预填、验证和提交逻辑,比手动写input更规范高效:

  1. 创建表单类型类ExpeditionType.php;
  2. 在Controller中初始化表单:
$form = $this->createForm(ExpeditionType::class, $info);
$form->handleRequest($request);
  1. 在Twig中渲染表单:
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit">保存</button>
{{ form_end(form) }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:50:27