Chuyển đến nội dung
Tài liệu

Hướng dẫn cho nhà phát triển

Sự kiện (trigger)

Lõi và từng mô-đun phát sinh sự kiện (trigger) trước và sau các thao tác chính. Mô-đun bên thứ ba can thiệp vào đây để mở rộng hành vi mà không cần sửa lõi.

Nguyên lý hoạt động

  • Hầu hết sự kiện phát sinh hai lần theo cặp before và after.
  • before: trước khi thực hiện thao tác. Nếu handler trả về lỗi (BaseObject thất bại), nó có thể dừng thao tác.
  • after: sau khi thao tác hoàn tất. Giá trị trả về thường bị bỏ qua. Dùng cho xử lý tiếp theo (gửi thông báo, làm mới bộ nhớ đệm, v.v.).

Đăng ký handler

Khai báo trong module.xml, rồi chạy cập nhật mô-đun là handler được đăng ký.

<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)
		{
			// 전역 트리거에서 내 모듈 사정으로 코어를 죽이지 않는다
		}
	}
}

Các sự kiện chính

Danh sách đầy đủ rất lớn nên ở đây chỉ ghi các sự kiện tiêu biểu theo từng nhóm. Quy tắc đặt tên là module.action.

Vòng đời request

Sự kiệnThời điểm
moduleHandler.initChuẩn bị xử lý request
moduleObject.procTrước và sau khi thực thi action
act:module.actionNameCan thiệp theo từng action cụ thể
displayNgay trước khi xuất kết quả cuối cùng

Tài liệu và bình luận

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

Thành viên

member.insertMember member.updateMember member.deleteMember member.doLogin member.doLogout member.addMemberToGroup v.v.

Tệp và khác

file.insertFile file.deleteFile file.downloadFile / communication.sendMessage / point.setPoint / menu.getModuleListInSitemap (khi muốn đưa mô-đun của mình vào danh sách mô-đun trên màn hình thêm menu)

Cách tìm chính xác sự kiện

Mã nguồn chính xác hơn tài liệu. Hãy tự tìm nơi phát sinh sự kiện trong lõi.

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

Xem chỗ gọi ModuleHandler::triggerCall('name', 'before|after', $obj) là bạn có thể thấy rõ dữ liệu nào được truyền qua $obj.

Nguyên tắc viết

  • Handler được thực thi ở mỗi lần thao tác tương ứng xảy ra. Hãy giữ nó nhẹ, và chỉ làm việc nặng sau khi đã thu hẹp điều kiện.
  • Đừng ném ngoại lệ ra ngoài. Các thao tác lõi như viết bài hay đăng nhập không được phép chết vì lý do riêng của mô-đun bạn.
  • Chỉ trả về lỗi khi muốn dừng ở before, và ở after đừng phụ thuộc vào giá trị trả về.