我对 Symfony (v 2.3.2) 表单有一个奇怪的问题。这是没有关系的非常简单的形式。我还应该指出,这种形式仅用于 REST API。
所以我有一个已发布的字段(布尔值)。在实体上,它默认设置为 false。
更新时,REST API 客户端发送正确的 PUT 请求...&[entity]published=0&...
。这个值也显示在 Symfony 分析器的表单参数中。
但是我注意到数据库中的实际值设置为 true(或 1,因为它是 tinyint)。
所以,为了找出问题所在,我在后面添加了 throw 语句$form->submit($request);
throw new \Exception(sprintf('Request: %s, form: %s', $request->get('entity')['published'], $form->get('published')->getData()));
或者
throw new \Exception(sprintf('Request: %s, form: %s', $request->get('entity')['published'], $form->getData()->getPublished()));
异常消息说:Request: 0, form: 1
。这意味着在提交方法中的某处,字符串值“0”被转换为 1。
该字段由$builder->add('published', 'checkbox', [ 'required' => false ])
我也注意到奇怪的事情,这可能是相关的。在 Symfony 分析器的面板请求中,我收到错误:Warning: json_encode(): Invalid UTF-8 sequence in classes.php line 3758
,我没有发送任何奇怪的字符 - 只是单词“test”。