unige/moodlewsclient

Moodle网络服务的客户端

dev-master 2019-10-15 12:52 UTC

This package is auto-updated.

Last update: 2024-09-16 00:59:32 UTC


README

MoodleWSClient 类是对远程 Moodle 服务器的占位符。服务器必须配置为通过 REST 协议公开网络服务。有关此主题的 Moodle 文档。您可以将 Moodle 网络服务功能作为对象的属性调用,例如:

require_once 'vendor/autoload.php';

$token = ...;  // user token, see Administration Block -> Plugins -> Web Services -> Manage tokens

$moodle = new \UniGe\MoodleWSClient('https://yourmoodle/', $token);

$site_info = $moodle->core_webservice_get_site_info();
echo "Your are connected to {$site_info->sitename}\n";

$courses = $moodle->core_course_get_courses();
foreach ($courses as $course) {
    echo $course->idnumber . " " . $course->fullname . "n";
}

用法

使用 composer 安装,搜索 unige/moodlewsclient。

实例化客户端占位符

$moodle = new \UniGe\MoodleWSClient($moodle_url);

该类实现了 \Psr\Log\Logger,因此您可以设置任何 PSR-3 兼容的日志记录器。

如果您有安全令牌,可以将其传递给构造函数

$moodle = new \UniGe\MoodleWSClient($moodle_url, $token);

或者

$moodle = new \UniGe\MoodleWSClient($moodle_url);
$moodle->setToken($token);

否则,您可以从 Moodle 获取一个

$moodle = new \UniGe\MoodleWSClient($moodle_url);
$token = $moodle->newToken($username, $password, $service);
$moodle->setToken($token);

如果您的网络需要代理,您可以在调用方法之前设置它

$moodle->setupProxy($host, $port, $user = NULL, $pass = NULL)

函数和参数

使用 PHP 魔法方法 __call(),MoodleWSClient 将远程 API 作为本地方法公开:例如,Moodle 网络服务函数 core_fun() 将作为 $moodle->core_fun() 调用。

但是,此客户端不知道服务器实际公开的函数,因为插件可以添加自己的函数,Moodle 服务定义也可以限制用户可用的核心函数。因此,此类接受任何函数名,如果服务器无法理解它,则引发异常。

作为 Moodle 管理员,您可以从管理块 -> 插件 -> 网络服务 -> API 文档中获取服务器上可用的函数列表

另一个问题是,Moodle 网络服务需要按名称传递参数,这使用关联数组在 PHP 中模拟。有时函数需要的参数在文档中可能不太直观。MoodleWSClient 类自动将对象序列化为所需的格式,因此您可以使用更流畅的样式。例如,创建课程:

$course = new stdClass();
$course->fullname = $info->fullname;

$course->shortname = $info->shortname;
$course->categoryid = $category->id;
$course->idnumber = $info->idnumber;
$course->visible = 0;
$course->summary = "<p>{$captions['codins']} {$info->codice_ins}</p>";
// ... other course field

$moodle->core_course_create_courses(['courses' => [$course]]);

请注意,网络服务连接设置具有显著的开销;您可以通过在每次可能的情况下传递多个参数来加快操作速度。幸运的是,Moodle 函数通常在元素数组上操作,例如 core_course_create_courses() 希望一次创建一个课程数组。

文件上传

即使存在上传文件的 Web 服务函数,其性能也较差。Moodle 提供了一种更有效的上传文件的方法,即使用 HTTP POST。MoodleWSClient 类在 upload() 方法中实现了它。