izumi-kun / yii2-lti-tool-provider
为 Yii2 的 LTI 工具模块
1.0.0
2024-09-02 09:01 UTC
Requires
- php: >=8.1
- celtic/lti: ^v5.1.0
- yiisoft/yii2: ~2.0.51
- yiisoft/yii2-httpclient: ~2.0.0
This package is auto-updated.
Last update: 2024-09-02 09:03:03 UTC
README
为 Yii2 的 LTI 工具模块。
安装
composer require izumi-kun/yii2-lti-tool-provider
使用
迁移
添加命名空间迁移: izumi\yii2lti\migrations
。应用新迁移。
应用配置
将模块添加到 web 配置并配置它。该模块支持以下事件以处理来自平台的消息
启动
配置
仪表板
内容项
内容项更新
提交审查
请确保配置对 lti/platform
控制器操作的访问。所有来自平台的消息都由 lti/tool
控制器处理,且没有访问限制。
$config = [ 'modules' => [ 'lti' => [ 'class' => \izumi\yii2lti\Module::class, 'tool' => [ 'debugMode' => YII_DEBUG, 'rsaKey' => 'A PEM formatted private key (for LTI 1.3 support)', ], 'on launch' => [SiteController::class, 'ltiLaunch'], 'on error' => [SiteController::class, 'ltiError'], 'as access' => [ 'class' => \yii\filters\AccessControl::class, 'rules' => [ ['allow' => true, 'controllers' => ['lti/tool']], ['allow' => true, 'controllers' => ['lti/platform'], 'roles' => ['admin']], ], ], ], ], ];
事件处理器
根据模块配置创建事件处理器。
namespace app\controllers; use izumi\yii2lti\ToolEvent; use Yii; use yii\web\BadRequestHttpException; use yii\web\Controller; class SiteController extends Controller { /** * basic-lti-launch-request handler * @param ToolEvent $event */ public static function ltiLaunch(ToolEvent $event) { $tool = $event->sender; // $userPk can be used for user identity $userPk = $tool->user->getRecordId(); $isAdmin = $tool->user->isStaff() || $tool->user->isAdmin(); Yii::$app->session->set('isAdmin', $isAdmin); Yii::$app->session->set('userPk', $userPk); Yii::$app->controller->redirect(['/site/index']); $tool->ok = true; $event->handled = true; } /** * LTI error handler * @param ToolEvent $event * @throws BadRequestHttpException */ public static function ltiError(ToolEvent $event) { $tool = $event->sender; $msg = $tool->message; if (!empty($tool->reason)) { Yii::error($tool->reason); if ($tool->debugMode) { $msg = $tool->reason; } } throw new BadRequestHttpException($msg); } }
结果
use ceLTIc\LTI; /* @var \izumi\yii2lti\Module $module */ $module = Yii::$app->getModule('lti'); $user = $module->findUserById(Yii::$app->session->get('userPk')); $result = '0.8'; $outcome = new LTI\Outcome($result); if ($module->doOutcomesService(LTI\Enum\ServiceAction::Write, $outcome, $user)) { Yii::$app->session->addFlash('success', 'Result sent successfully'); }
示例应用
https://github.com/Izumi-kun/yii2-lti-tool-provider-sample