本文へスキップ
ドキュメント

開発者ガイド

イベント(トリガー)

コアと各モジュールは、主要な動作の前後でイベント(トリガー)を発生させます。サードパーティのモジュールはここに割り込み、コアを修正せずに動作を拡張します。

動作の仕組み

  • ほとんどのイベントは before と after の1組で、2回発生します。
  • before:処理の実行前。ハンドラーがエラー(BaseObject の失敗)を返すと、処理を中断させることができます。
  • after:処理の完了後。戻り値は通常無視されます。後続処理(通知の送信、キャッシュの更新など)に使います。

ハンドラーの登録

module.xml に宣言し、モジュールのアップデートを実行すると登録されます。

<eventHandlers>
	<eventHandler before="document.insertDocument" class="Controllers\Trigger" method="beforeInsertDocument" />
	<eventHandler after="document.insertDocument" class="Controllers\Trigger" method="afterInsertDocument" />
</eventHandlers>
<?php

namespace Zittme\Modules\Mymodule\Controllers;

class Trigger extends Base
{
	// $obj 에 대상 데이터(문서 등)가 참조로 들어옵니다
	public function afterInsertDocument(&$obj)
	{
		try
		{
			// 예: 새 글 등록 시 외부 알림
		}
		catch (\Throwable $e)
		{
			// 전역 트리거에서 내 모듈 사정으로 코어를 죽이지 않는다
		}
	}
}

主なイベント

全一覧は膨大なため、カテゴリーごとの代表的なものだけを記します。命名規則は module.action です。

リクエストのライフサイクル

イベントタイミング
moduleHandler.initリクエスト処理の準備
moduleObject.procアクション実行の前後
act:module.actionName特定のアクション単位で割り込む
display最終出力の直前

文書・コメント

document.insertDocument document.updateDocument document.deleteDocument document.moveDocumentToTrash document.getDocumentList / comment.insertComment comment.updateComment comment.deleteComment など

会員

member.insertMember member.updateMember member.deleteMember member.doLogin member.doLogout member.addMemberToGroup など

ファイル・その他

file.insertFile file.deleteFile file.downloadFile / communication.sendMessage / point.setPoint / menu.getModuleListInSitemap(メニュー追加画面のモジュール一覧に自分のモジュールを載せるとき)

正確なイベントを探す方法

ドキュメントよりコードのほうが正確です。コアでイベントが発生する箇所を直接探してください。

grep -rn "triggerCall('찾을이름" modules/ classes/

ModuleHandler::triggerCall('name', 'before|after', $obj) の呼び出し部分を見れば、どんなデータが $obj として渡されるかをそのまま確認できます。

作成のルール

  • ハンドラーは該当するすべての動作のたびに実行されます。軽く保ち、重い処理は条件を絞ってから行ってください。
  • 例外を外に投げないでください。自分のモジュールの都合で、投稿・ログインのようなコアの動作が止まってはいけません。
  • エラーを返すのは before で中断させるときだけにし、after では戻り値に依存しないでください。