psagnataf/moodle-client

Moodle客户端

1.1.1 2021-07-28 20:29 UTC

This package is auto-updated.

Last update: 2024-09-29 05:49:52 UTC


README

安装

推荐通过Composer安装库

$ composer require ozq/moodle-client:dev-master

使用

创建与您的Moodle服务的连接实例

$connection = new Connection('http://url-to-moodle-service.com', 'Y0uR!tOken');

创建可用的Moodle客户端实例之一,例如REST客户端

$client = new RestClient($connection);

现在,您可以使用Moodle服务了。有一些内置的、可直接使用的Moodle实体。所有逻辑和API都封装在Moodle服务和实体中。让我们创建课程服务实例。

创建实例

$courseService = new Course($client);

获取所有课程

$courses = $courseService->getAll();

删除ID为1, 2, 3的课程

$courses = $courseService->delete([1, 2, 3]);

如果您需要发送一些特定的结构化数据,例如创建新课程时,最好使用特殊的DTO对象

$courseDto = new Course();
$courseDto->name = 'Test Course';
$courseDto->fullName = 'Test Course fullname';
...
$courseService->create($courseDto);

如果没有内置的所需服务和实体,您可以创建它们。
服务必须扩展Service抽象类,实体(作为DTO)必须扩展Entity抽象类。

此外,您也可以在不使用服务层的情况下使用Moodle客户端

$courses = $client->sendRequest('core_course_get_courses');

Laravel集成示例

  1. 创建配置文件(config/moodle.php),其中包含以下内容用于Moodle服务
<?php

return [
    'connection' => [
        'url'   => 'http://url-to-moodle-service.com',
        'token' => 'Y0uR!tOken',
    ],
];
  1. 创建服务提供者
$ php artisan make:provider MoodleServiceProvider

MoodleServiceProvider注册方法示例

public function register()
{
    $this->app->singleton(ClientAdapterInterface::class, function () {
        $connection = new Connection(config('moodle.connection.url'), config('moodle.connection.token'));
        return new RestClient($connection);
    });
}
  1. 注册MoodleServiceProvider
    编辑您的config/app.php,在'providers'数组中添加\App\Providers\MoodleServiceProvider::class

  2. 清除配置缓存

$ php artisan clear-compiled
$ php artisan config:clear
  1. 现在您可以在项目中使用Moodle服务了
<?php

namespace App\Http\Controllers;

use Ozq\MoodleClient\Services\Course;

/**
 * Class CourseController
 * @package App\Http\Controllers
 */
class CourseController extends Controller
{
    /**
     * @var Course
     */
    protected $courseService;

    /**
     * CourseController constructor.
     * @param Course $courseService
     */
    public function __construct(Course $courseService)
    {
        $this->courseService = $courseService;
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $courses = $this->courseService->getAll();
        return view('courses.index', ['courses' => $courses]);
    }
}