Yii2表单验证场景切换输出JSON错误

老萱同学_5128

老萱同学_5128

2026-08-18

382人浏览

原创

Yii2表单验证场景切换后需手动validate()并返回JSON错误:先设$model->scenario,再调用validate(),用getErrors()获取错误数组,最后以JSON格式响应。

yii2表单验证场景切换输出json错误

Yii2 表单验证场景(scenario)切换后,若想统一以 JSON 格式返回错误(比如用于 AJAX 提交),关键在于:**手动触发验证 + 捕获并格式化错误 + 统一响应出口**。默认情况下,`$model->validate()` 不会自动抛出异常,也不会自动转 JSON;而 `save()` 在失败时也只返回 false,需主动提取错误。

确保模型设置了正确的场景

在控制器中,必须显式设置 `scenario`,否则即使规则里定义了场景,模型仍使用默认场景(通常是 default):

  • 在实例化后立即赋值:$model->scenario = 'login';
  • 或在 new 时传入:$model = new User(['scenario' => 'login']);
  • 检查模型类中是否正确定义了该场景的规则,例如:
    public function rules()
    {
      return [
        [['username', 'password'], 'required', 'on' => 'login'],
        [['email'], 'email', 'on' => 'register'],
      ];
    }

手动验证并捕获错误信息

不要依赖 `save()` 的返回值直接输出,而是先调用 `validate()`,再判断并构造 JSON 响应:

arcgis-js
arcgis-js

提供 ArcGIS Maps SDK for JavaScript 开发辅助,涵盖 2D/3D 地图视图、图层管理、数据可视化、空间分析等功能模块的参考和示例指导。

下载
  • 调用 $model->validate() 触发当前场景下的规则校验
  • 用 $model->hasErrors() 判断是否有错
  • 用 $model->getErrors() 获取多维数组形式的错误(键为属性名,值为字符串数组)
  • 可选:用 yii\helpers\Json::encode() 或原生 json_encode() 输出,注意设置 header

控制器中返回 JSON 的典型写法

示例(Action 内):

$model = new LoginForm();
$model->scenario = 'login';
$model->load(Yii::$app->request->post(), '');

if (!$model->validate()) {
    Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
    return [
        'success' => false,
        'errors' => $model->getErrors(),
    ];
}

// 验证通过后处理登录逻辑...

进阶:全局统一错误响应(可选)

如项目中大量 AJAX 表单,可封装一个基类方法或行为(Behavior),在控制器中复用:

  • 定义一个 renderJsonErrors($model) 工具方法
  • 提取通用字段如 field、message,适配前端框架(如 Element UI 或 Ant Design 的表单错误格式)
  • 对 `getErrors()` 结果做扁平化处理(例如转成 [ ['field'=>'username','message'=>'用户名不能为空'] ])

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

js json yii2 yii

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.08.07

2235

5

json是什么
json是什么

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

2023.08.23

3582

1

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

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

2023.10.13

1196

3

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

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

2025.09.10

4139

7

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

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

2026.03.30

261

20

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

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

2025.09.04

3150

22

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

2026.11.03

0

17

Tailwind CSS 响应式布局怎么写
Tailwind CSS 响应式布局怎么写

Tailwind CSS 响应式布局通常从移动端样式写起,再用 sm、md、lg 等前缀调整不同屏幕宽度下的网格、间距和导航。本专题整理断点配置、Grid 与 Flex 自适应布局及常见溢出问题,帮助你逐步完成多设备适配。

2026.11.03

0

19

Tailwind CSS 常用类名怎么记
Tailwind CSS 常用类名怎么记

Tailwind CSS 类名很多,先按布局、间距、文字、颜色和状态分组记忆,再通过官方文档检索具体写法。本专题结合类名排序、动态拼接失效、自定义实用类等问题,帮助你建立常用类名的速查方法。

2026.11.03

0

12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习