You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:通过Moodle Webservice API设置测验模块时间限制的参数问题

解决Moodle Webservice API设置测验时间限制的嵌套参数问题

问题核心

要通过Moodle Webservice API设置测验的时间限制,官方要求使用timelimit[enabled]、timelimit[timeunit]、timelimit[number]三个参数,但按modules[0][timelimit[enabled]]这种嵌套格式传参时,会触发错误:

Unexpected keys (timelimit[enabled) detected in parameter array.

尝试过URL编码(modules[0][timelimit%5Benabled%5D])、转义、加引号等方法都无效,而UI创建测验时用的平级参数timelimit%5Bnumber%5D=45仅适用于单个测验编辑场景,无法满足多模块批量设置的需求。

解决方案

Moodle的Webservice API基于PHP的数组参数解析规则,正确的嵌套参数格式应该将timelimit作为一个完整的子数组层级,而非把键名拆进嵌套括号里:

1. URL参数格式(表单提交或GET请求)

modules[0][timelimit][enabled]=1
modules[0][timelimit][timeunit]=60
modules[0][timelimit][number]=45

对应的URL编码版本为:

modules%5B0%5D%5Btimelimit%5D%5Benabled%5D=1
modules%5B0%5D%5Btimelimit%5D%5Btimeunit%5D=60
modules%5B0%5D%5Btimelimit%5D%5Bnumber%5D=45

2. JSON请求格式(推荐用于批量操作)

如果API支持JSON格式传参,直接构造嵌套JSON结构更清晰:

{
  "modules": [
    {
      "timelimit": {
        "enabled": 1,
        "timeunit": 60,
        "number": 45
      }
    }
  ]
}

原理说明

之前的错误格式modules[0][timelimit[enabled]]会被PHP解析为modules[0]['timelimit[enabled'](缺失闭合括号),导致Moodle识别为非法键名。而正确的层级拆分modules[0][timelimit][enabled]会被解析为modules[0]['timelimit']['enabled'],完全符合Moodle对测验时间限制参数的结构要求。

内容的提问来源于stack exchange,提问作者Farhad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 12:55:06