yii2中api接口使用model验证json数据需设置content-type为application/json,模型定义规则后通过load(bodyparams, '')加载并validate()验证,失败时返回标准化errors结构。

Yii2 中 API 接口使用 Model 进行表单验证时,接收 JSON 数据需注意请求头、数据解析和验证流程。默认情况下 Yii2 会自动解析 application/json 请求体为 PHP 数组(需开启 enableJsonValidation),但需确保控制器正确配置并返回结构化错误信息。
确保请求头与数据格式正确
前端发送请求时必须设置:
- Content-Type: application/json
- 请求体为合法 JSON,例如:
{"username":"admin","email":"a@b.c"} - 避免混用
application/x-www-form-urlencoded或 query 参数替代 JSON 主体
Model 中定义验证规则
在模型类(如 UserForm.php)中声明属性和规则:
class UserForm extends Model
{
public $username;
public $email;
public function rules()
{
return [
[['username', 'email'], 'required'],
['username', 'string', 'min' => 2, 'max' => 20],
['email', 'email'],
];
}
}
Controller 中接收并验证 JSON 数据
在 REST 控制器中(如 UserController)直接实例化模型并加载数据:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
public function actionCreate()
{
$model = new UserForm();
// Yii2 自动解析 JSON 请求体到 $model->attributes(前提是 Content-Type 正确)
$model->load(\Yii::$app->request->bodyParams, '');
if ($model->validate()) {
// 处理业务逻辑,如保存用户
return ['success' => true, 'data' => ['id' => 123]];
} else {
\Yii::$app->response->setStatusCode(422);
return ['success' => false, 'errors' => $model->errors];
}
}
注意:load() 的第二个参数为空字符串,表示不加前缀(因 JSON 是扁平结构);若 JSON 带外层键(如 {"user":{...}}),则传 'user'。
返回标准化 JSON 错误格式
验证失败时建议统一结构,便于前端处理:
{
"success": false,
"errors": {
"username": ["Username cannot be blank.", "Username must be between 2 and 20 characters."],
"email": ["Email is not a valid email address."]
}
}
Yii2 默认的 $model->errors 即为此格式,无需额外转换。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










