현재 core/modules/member/member.controller.php 에 있는 doLogin() 함수를 보고 있습니다. 근데 여기서
$trigger_obj = new stdClass();
$trigger_obj->user_id = $user_id;
$trigger_obj->password = $password;
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'before', $trigger_obj);
if(!$trigger_output->toBool()) return $trigger_output;
$trigger_obj->user_id = $user_id;
$trigger_obj->password = $password;
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'before', $trigger_obj);
if(!$trigger_output->toBool()) return $trigger_output;
triggerCall을 통해서 이 함수를 또 호출해주고 있는데요.. 이게 무슨의미인지 모르겠습니다.
그리고 trigger의 before, after를 넣었을때, 어느 시점에서 trigger가 실행되는지도 잘 모르겠구요..
지식 공유 부탁드립니다!
댓글 8
그렇다면 제은일행님 말씀대로 트리거를 불러와서 실행한다면 before와 after는 어떤 용도로 사용되나요?
before와 after는 그냥 트리거 이름의 일부라고 생각하시면 됩니다. member.doLogin + before 조합으로 등록한 트리거는 동일한 조합으로 호출했을 때만 실행됩니다.
doLogin() 함수를 자세히 보시면 로그인 처리 전에 before 트리거를 호출하고, 처리 후에 after 트리거를 호출하는 것을 볼 수 있습니다. 로그인 과정에서 언제 끼어들기를 원하는지에 따라 용도에 맞게 사용하시면 됩니다. 예를 들어 특정 유저의 로그인을 금지하는 모듈을 개발하신다면 로그인 전에 막아야 하니까 before에서 끼어들어야겠고, 로그인 기록을 남기는 모듈을 개발하신다면 로그인에 성공한 후 통보만 받으면 되니까 after에서 끼어드는 것이 더 효율적입니다.
대부분의 트리거는 before, after가 모두 있지만, 가끔 둘 중 하나만 있는 경우도 있습니다.