我正在使用 Symfony2 表单来验证对 API 的 POST 和 PUT 请求。表单处理将请求数据绑定到底层实体,然后验证实体。除了收集错误之外,一切都运行良好。我正在使用 FOSRestBundle,如果验证失败,我会抛出一个带有 400 状态代码的 Symfony\Component\HttpKernel\Exception\HttpException 和一条包含表单错误消息的消息。FOSRestBundle 处理将其转换为 JSON 响应。我必须执行所有这些操作的控制器方法如下所示(所有字段将它们的错误冒泡到表单中):
protected function validateEntity(AbstractType $type, $entity, Request $request)
{
$form = $this->createForm($type, $entity);
$form->bind($request);
if (! $form->isValid()) {
$message = ['Invalid parameters passed.'];
foreach ($form->getErrors() as $error) {
$message[] = $error->getMessage();
}
throw new HttpException(Codes::HTTP_BAD_REQUEST, implode("\n", $message));
}
}
我遇到的问题是,当我通过 $form->getErrors() 收集表单级错误时,我只能访问错误消息,而不是错误连接到的字段的名称。当 POST 或 PUT 参数对应于相关实体的 id 时,这是一个特殊问题。如果提交了无效值,则错误消息只是“此值无效”,这在这种情况下不是很好。理想情况下,我想做以下任一项:
- 对于每个错误,获取它所连接的字段名称,以便我可以格式化消息,例如“字段名称:错误消息”
- 如果这不可能,是否可以为无效实体类型自定义错误消息,以便显示比“此值无效”更好的内容?