讲师中心 微信公众号
AI工具推荐 视频效率加速

Yii2表单验证错误信息封装JSON实现

梦芳吖_7581

梦芳吖_7581

发布时间:2026-08-21 17:38:07

|

711人浏览过

|

来源于php中文网

原创

Yii2 API场景下需将表单验证错误转为JSON响应:显式调用validate(),失败时用422状态码返回扁平化errors(取各字段首个错误),可封装formatErrors()处理,并在控制器统一拦截输出。

yii2表单验证错误信息封装json实现

Yii2 表单验证失败时,默认返回的是 HTML 页面或重定向,但在前后端分离或 API 场景下,需要将验证错误以 JSON 格式统一返回,便于前端解析展示。核心思路是捕获 Model::validate() 的结果,将 $model->errors 结构转换为扁平、语义清晰的 JSON 响应。

统一拦截验证失败并转为 JSON

在控制器中,不直接调用 $model->save()(它会自动 validate),而是显式验证,并手动控制响应格式:

  • 调用 $model->validate() 触发规则校验
  • 检查 $model->hasErrors() 判断是否出错
  • 若出错,用 yii\helpers\Json::encode() 将错误结构标准化输出,并设置 HTTP 状态码为 422(Unprocessable Entity)

示例代码:

public function actionCreate()
{
    $model = new Post();
    if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        if ($model->save()) {
            return $this->asJson(['success' => true, 'data' => $model->attributes]);
        }
    }

    // 验证失败:返回结构化错误
    if ($model->hasErrors()) {
        Yii::$app->response->setStatusCode(422);
        return $this->asJson([
            'success' => false,
            'errors' => $this->formatErrors($model->errors)
        ]);
    }
}

规范错误字段结构(key → message)

Yii2 默认的 $model->errors 是二维数组:['title' => ['标题不能为空', '标题长度不能超过20']]。前端通常更希望是扁平 key-value 形式,例如:{"title": "标题不能为空"}(取每字段首个错误)。可封装一个辅助方法:

jm-jsjkxyjs02-pzl-803
jm-jsjkxyjs02-pzl-803

查询全球任意城市的实时天气和未来天气预报

下载
  • 遍历 $errors,对每个属性取 $errors[$attribute][0]
  • 支持自定义 message 拼接(如加前缀“请填写”)
  • 避免空字段或 null 错误干扰

参考 formatErrors() 实现:

protected function formatErrors($errors)
{
    $result = [];
    foreach ($errors as $attribute => $msgs) {
        if (!empty($msgs)) {
            $result[$attribute] = is_array($msgs) ? reset($msgs) : $msgs;
        }
    }
    return $result;
}

全局处理(适用于 RESTful 应用)

若项目大量使用 API,可在 behaviors() 中配置 ContentNegotiator 和自定义 beforeAction 统一拦截验证异常:

  • 重写 beforeAction(),在 ActiveForm 或模型 save 失败时提前终止流程
  • 监听 yii\base\ModelEvent::EVENT_BEFORE_VALIDATE 不推荐;更稳妥的是在控制器层统一出口处理
  • 配合 yii\rest\Controller 时,可继承并覆盖 afterAction() 对验证失败做响应修正

前端接收与提示建议

返回的 JSON 示例:

{
  "success": false,
  "errors": {
    "title": "标题不能为空",
    "content": "内容必须至少10个字符"
  }
}

前端可直接遍历 response.errors,按字段 ID 插入对应 <span class="error"></span> 提示,无需解析嵌套结构。注意保留原始字段名(如 user[username] 这类复合名需在模型中用 formName() 或自定义场景处理)。

热门AI工具

更多
火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

1955

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

2582

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

896

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

2879

2025.09.10

ThinkPHP表单验证与数据安全处理实战
ThinkPHP表单验证与数据安全处理实战

本专题聚焦 ThinkPHP 在表单处理中的验证与安全机制,系统讲解验证器使用、自定义规则、场景验证以及错误提示处理。内容涵盖 XSS 防护、SQL 注入防御、数据过滤与输入校验等关键安全措施。通过实际案例,帮助开发者构建安全可靠的数据处理流程。

161

2026.03.30

PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2730

2025.09.04

NumPy数组创建索引切片与数据选择
NumPy数组创建索引切片与数据选择

本专题整理 NumPy 数组创建、索引、切片与数据选择相关教程,覆盖 np.array、zeros/ones、多维数组形状、基础切片、花式索引、布尔索引、条件筛选、视图与副本等常用场景,帮助读者系统掌握 ndarray 数据构造与高效提取方法。

0

2026.09.21

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

20

2026.09.20

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

0

2026.09.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii2中文手册
Yii2中文手册

共0课时 | 0.6万人学习

thinkphp基础介绍和yii2基础介绍
thinkphp基础介绍和yii2基础介绍

共10课时 | 2.5万人学习

Yii2框架基础视频教程
Yii2框架基础视频教程

共22课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn