gpt4 book ai didi

php - 获取所有错误以及错误所连接的字段

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:34 25 4
gpt4 key购买 nike

我正在使用 Symfony2 表单来验证对 API 的 POST 和 PUT 请求。表单处理将请求数据绑定(bind)到底层实体,然后验证实体。除了收集错误外,一切都运行良好。我正在使用 FOSRestBundle 并抛出一个 Symfony\Component\HttpKernel\Exception\HttpException 以及一个 400 状态代码和一条包含表单错误消息的消息(如果验证失败)。 FOSRestBundle 负责将其转换为 JSON 响应。我必须执行所有这些操作的 Controller 方法如下所示(所有字段将错误冒泡到表单中):

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 时,这是一个特殊的问题。如果提交了无效值,则错误消息只是“此值无效”,这在这种情况下不是很好。理想情况下,我想执行以下任一操作:

  • 对于每个错误,获取它所连接的字段名,以便我可以将消息格式化为类似于“字段名:错误消息”的格式
  • 如果这不可能,是否可以自定义无效实体类型的错误消息,以便显示比“此值无效”更好的内容?

最佳答案

对于 symfony >= 2.2

private function getErrorMessages(\Symfony\Component\Form\Form $form) {
$errors = array();
foreach ($form->getErrors() as $key => $error) {
$template = $error->getMessageTemplate();
$parameters = $error->getMessageParameters();

foreach ($parameters as $var => $value) {
$template = str_replace($var, $value, $template);
}

$errors[$key] = $template;
}
if ($form->count()) {
foreach ($form as $child) {
if (!$child->isValid()) {
$errors[$child->getName()] = $this->getErrorMessages($child);
}
}
}
return $errors;
}

关于php - 获取所有错误以及错误所连接的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com