Symfony PropertyAccessor无法读取属性:工单创建表单提交报错
报错核心原因
该报错由两个命名不匹配问题导致,Symfony的PropertyAccessor组件需要严格匹配属性/方法名才能读写实体数据:
- Ticket实体的
$Etat_Ticket属性缺少对应的公开getter/setter方法,PropertyAccessor无法读取、写入该属性的值 - TicketType中
Etat_Ticket字段的choice_label配置为Statut(首字母大写),和Etat实体里的小写开头属性$statut不匹配,无法读取选项的显示文本
修复步骤
- 给Ticket实体的
$Etat_Ticket属性添加合法的getter、setter方法,示例代码如下:
public function getEtatTicket(): ?Etat { return $this->Etat_Ticket; } public function setEtatTicket(?Etat $Etat_Ticket): self { $this->Etat_Ticket = $Etat_Ticket; return $this; }
如果要完全符合Symfony编码规范,建议将属性名修改为小驼峰格式$etatTicket,同步修改对应的ORM注解即可。
- 修正TicketType中
Etat_Ticket字段的choice_label参数,和Etat实体的属性名保持一致:
->add('Etat_Ticket', EntityType::class, [ 'class' => Etat::class, 'choice_label' => 'statut', ])
- 可选优化:你已经在控制器中手动设置了Ticket的Date属性,可将表单中的Date字段设置为不映射到实体,避免数据冲突:
->add('Date', DateTimeType::class, [ 'data' => new \DateTime(), 'mapped' => false ] )
内容的提问来源于stack exchange,提问作者Gaiaryde
相关产品推荐
相关产品推荐

