unige / moodlewsclient
Moodle网络服务的客户端
Requires
- psr/log: ^1.0.0
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() 方法中实现了它。