Moodle 本地插件中的 invalid_response_Exception

我已经安装了本地插件并设法检索单个数组。但是当我尝试加载数组列表时,它会抛出错误。

http://img4.mukewang.com/64969b97000123b410830156.jpg

“课程名称”存储在结果数组的第二个位置,如下所示。

class local_get_completion_overview_external extends external_api {


    public static function get_completion_overview_parameters() {

        return new external_function_parameters(

            array(

                'field' => new external_value(PARAM_ALPHA, 'The field to search can be left empty for all courses or:

                    id: course id', VALUE_DEFAULT, '')

            )

        );

    }


    public static function get_completion_overview(){

        global $CFG, $DB;

        require_once($CFG->dirroot . '/course/lib.php');

        require_once($CFG->libdir . '/filterlib.php');


        $params = self::validate_parameters(self::get_completion_overview_parameters($field = ''),

            array(

                'field' => $field

            )

        );


        $sql = "SELECT DISTINCT cr.id AS courseid,

                cr.fullname AS coursename,

                COUNT(DISTINCT ra.id ) AS enrols,

                COUNT(DISTINCT cc.timecompleted) AS completed

                FROM {course} cr

                JOIN {context} ct ON ( ct.instanceid = cr.id )

                LEFT JOIN {role_assignments} ra ON ( ra.contextid = ct.id ) and ra.roleid = 5

                LEFT JOIN {course_completions} cc ON cc.course = cr.id

                GROUP BY  cr.fullname, cr.id

                ORDER BY coursename";


        $courseids = array();

        $warnings = array();

        // $requestedcourseids = $params['field'];


        if (empty($params['field'])) {

            $courses = $DB->get_records_sql($sql, array());

        }        

if(!empty($courses)){


            $coursesdata = array();

            $currentcourseid = null;

            $course = null;



我发现一个 Moodle 论坛说不好的语言类型会导致这个问题,所以应该改变它。(https://moodle.org/mod/forum/discuss.php?d=355334)我想这可能是这种情况,因为错误从 return() 中的第二个数组抛出,这是一个文本值,但我可能是错的最好在我做下一步之前问清楚。


提前致谢,如有任何帮助,我们将不胜感激!


汪汪一只猫
浏览 95回答 1
1回答

Cats萌萌

VALUE_OPTIONAL您可以通过将子句添加到返回数据来解决该问题:public static function get_completion_overview_returns() {        return new external_single_structure(            array(                'course' => new external_multiple_structure(                    new external_single_structure(                        array(                            'courseid' => new external_value(PARAM_INT, ''),                            'coursename' => new external_value(PARAM_TEXT, '', VALUE_OPTIONAL),                            'enrols' => new external_value(PARAM_INT, '', VALUE_OPTIONAL),                            'completed' => new external_value(PARAM_INT, '', VALUE_OPTIONAL),                        )                    )                ),            )        );    }然后您可能应该检查是否有空数据案例。
打开App,查看更多内容
随时随地看视频慕课网APP