我们最近更新了Sylius 0.17 ,它在相当多的实体上引入了不可变的 code 字段 . 我们目前只使用 promotion 部分,这是我们Symfony标准应用程序的一部分 .

  • 表单( PromotionType )添加 AddCodeFormSubscriber eventsubscriber .

  • 实体有一个'unique'验证器,用于在表单中显示异常消息 .

如果我们的Controller在保存后更新了促销,它就不会被更改,所以我因为不变性而错过了一些影响它的类 . 但是,我无法找出究竟发生了什么 .

结果,表单继续抛出错误,因为代码不是唯一的 . 那么,如何为Sylius code 字段配置某种生成器呢?

Edit: 我们通过将 code 设置为"prefix+id"来迁移现有数据 . 表单订阅者实际上添加了一个以 1 作为值的字段 . 所以,不知何故设定了 Value . 如果我们保存促销,然后添加另一个, code 字段仍设置为 1 . 究竟什么确定这个值应该设置为 1 ?在将实体绑定到表单之前,表单不尊重我们手动执行的 Promotion::setCode() .